Je souhaite inclure différents répertoires dans ma construction en fonction de la déclaration d'une #define dans un fichier .h de mon projet. Est-ce possible ou est-ce que je vais complètement à tort?Est-il possible de tester si une définition C est déclarée dans un Makefile gnu?
Répondre
Oui, vous l'êtes. Le système de construction est censé configurer le code, et non l'inverse. Vous devriez utiliser un script configure pour ce genre d'options (ou passer probablement à un système de compilation supérieur: autotools, CMake, QMake ...).
C'est possible, mais vous vous y trompez. La façon d'inclure différents répertoires est avec des cibles différentes. Si votre code doit les connaître, utilisez -D
dans vos options de compilation. Alternativement, si votre build doit être capable de fonctionner sur les systèmes d'autres personnes, quelque chose comme autoconf est la voie à suivre.
Les autres réponses ont expliqué pourquoi c'est une mauvaise idée. Quoi qu'il en soit, d'une façon de le faire est par prétraiter un fragment makefile:
En foo.mk.in
:
#ifdef FOO
FOO_DEFINED := y
#else
FOO_DEFINED := n
#endif
En Makefile
:
foo.mk: foo.mk.in
$(CPP) $(CPPFLAGS) -o [email protected] $<
include foo.mk
ifeq ($(FOO_DEFINED),y)
$(warning FOO is defined)
else
$(warning FOO is not defined)
endif
Bon travail. Il suffit de le faire. –