web-dev-qa-db-fra.com

Est-il possible de définir une macro C dans un makefile?

Est-il possible de mettre l'équivalent de #define VAR (dans un programme C) dans un makefile, afin que l'on puisse contrôler quelle partie du programme doit être compilée?

25
Richard

Conformément à cc page de manuel sur linux

-D name=definition
           The contents of definition are tokenized and processed as if they appeared during translation phase three in a #define directive.  In
           particular, the definition will be truncated by embedded newline characters.
21
Zimbabao

Modifiez votre Makefile pour afficher

CFLAGS = -D VAR1 -D VAR2= * quelque chose *

Si vous utilisez des règles par défaut dans le Makefile, cela devrait fonctionner automatiquement. Si vous ne le faites pas et que vous invoquez explicitement le compilateur C, assurez-vous simplement que vous écrivez quelque chose dans le sens de

$ (CC) $ (CFLAGS) -c -o $ @ $ <

Encore plus mignon si le fait que CFLAGS=... Ci-dessus peut être utilisé sur la ligne de commande plutôt qu'écrit dans le Makefile (lire la page de manuel man(1)); cela permet de reconfigurer facilement vos paramètres de compilation au dernier moment, mais les paramètres ne seront pas conservés.

Les meilleures pratiques incluent l'utilisation de CPPFLAGS au lieu de CFLAGS et l'utilisation de += Au lieu de =; cependant, la prise en charge de ces fonctionnalités n'est pas aussi universelle que ci-dessus et dépend de votre système de fabrication.

12
AntoineL

Oui.

La plupart des compilateurs prennent en charge les options de ligne de commande pour spécifier # define's. Pour Visual C++, il s'agit de option/D .

7
Michael