web-dev-qa-db-fra.com

Passer C / C ++ #defines au makefile

Je développe C/C++ en utilisant l'IDE Eclipse. Eclipse génère également un makefile que je ne souhaite pas modifier car il sera simplement écrasé.

Je veux utiliser ce makefile pour la construction nocturne d'Hudson.

Comment passer les #defines qui sont créés dans le fichier projet du IDE au makefile? (Et pourquoi Eclipse ne les inclut-il pas déjà dans le makefile généré?)

En fait, je l'ai fait comprendre une fois, puis je l'ai accidentellement écrasé :-( Mais au moins je sais que cela peut être fait ...

Si vous exécutez make depuis la ligne de commande, utilisez

make CPPFLAGS=-DFOO

ce qui ajoutera -DFOO à toutes les compilations. Voir aussi CFLAGS, CXXFLAGS, LDFLAGS dans le manuel de fabrication.

29
Scott Wales

Vous pouvez écrire un petit programme pour inclure les en-têtes et écrire un fragment de makefile que vous include dans le makefile principal (nécessite GNU make).

Il s'agit d'une solution assez moche qui nécessite une bonne quantité de piratage manuel. Plus élégant serait d'analyser le fichier de projet et d'écrire le fragment makefile.

2
dmckee

Pour GCC, utilisez -D define.

OP a indiqué ci-dessous qu'il souhaitait transmettre le define dans make et le faire passer à GCC.

Make ne le permet pas. En règle générale, vous ajoutez simplement une autre règle de création pour ajouter des définitions. Par exemple, "make release" vs "make debug". En tant que créateur de makefile, vous créez les deux règles et avez les définitions directement dans le fichier make. Maintenant, si Eclipse ne met pas les définitions dans le makefile pour vous, je dirais qu'Eclipse est cassé.

1
Gregor Brandt

Si vous utilisez les autotools, une autre option est d'avoir 2 répertoires 'bin/debug' et 'bin/release'.

# Simple bootstrap script.

# Remove previously generated filed and call autoreconf.
# At the end configure 2 separate builds.
echo "Setting up Debug configuration: bin/debug"
../../configure CXXFLAGS="-g3 -O0 -DDEBUG=1"
echo "Setting up Release configuration: bin/release"
cd bin/release/
../../configure CXXFLAGS="-O2"

Configurez Eclipse. Ouvrez les propriétés du projet (Projet-> Propriétés-> Construction C/C++-> Paramètres du générateur) et définissez l'emplacement de construction-> Répertoire de construction sur

${workspace_loc:/helloworld/bin/debug}

Remplacer 'helloworld' par le répertoire de votre projet par rapport à l'espace de travail (ou vous pouvez fournir un chemin absolu $ {/ abs/path/debug}). Faites la même chose avec la configuration Release, en remplaçant "/ debug" par "release" à la fin du chemin.

Cette méthode semble être un gaspillage d'espace disque, mais une alternative valable pour réaliser des builds complètement séparés.

1
Plamen