Comment définir macro dans makefile.am que je peux utiliser dans le code, par exemple, #ifdef ABC
, où la variable #ifdef ABC
est définie dans makefile.am, mais peut être utilisé dans code. J'ai lu ce question, qui parle de la façon de définir la macro dans le makefile, mais pas makefile.amcomment définir la macro dans makefile.am que je peux utiliser dans le code
Répondre
un Makefile.am
est un modèle pour un Makefile
(bien, pour Makefile.in
qui est un modèle pour le final Makefile
). Alors que automake génère beaucoup de code dans la traduction Makefile.am
->Makefile.in
, il laissera les parties intactes, vous permettant d'insérer votre propre code.
typique (demo) Makefile.am ressemblerait à ceci:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c
foo_CPPFLAGS = -DFOO
qui aura FOO
défini (il ajoute '-DFOO' aux drapeaux préprocesseur) lors de la compilation du programme foo
.
un exemple plus complexe (et inhabituelle) pourrait ressembler à:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c abc.c
foo_CPPFLAGS = [email protected]@
avec un configure.ac qui contient quelque chose comme:
FOODEF=KNURK
AC_SUBST(FOODEF)
qui fournit l'équivalent d'avoir #define KNURK
dans chaque source -fichier pour foo
ce qui précède est atypique, comme d'habitude vous remplaceriez les drapeaux "autonomes", par exemple quelque chose comme le Makefile.am suivant:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c abc.c
foo_CPPFLAGS = @[email protected] -I/usr/include/fu/
accompagné d'un extrait de configure.ac comme:
FOODEFS=
AC_ARG_WITH([knork], AC_HELP_STRING([--with-knork=<str>], [build with knork (or frozz otherwise]))
AS_IF([test "x$with_knork" = "xyes" ],FOODEFS="-DKNORK")
AS_IF([test "x$with_knork" = "xno" ], FOODEFS="-DFROZZ")
AC_SUBST(FOODEF)
Le fichier makefile lui-même ne se soucie pas de votre code, compilé ou non. C'est le travail du compilateur.
Si vous utilisez GCC, vous pouvez définir des symboles avec les options -D comme celui-ci:
gcc -DABC=3 -o main.o main.c
Vous pouvez bien sûr utiliser une variable Makefile comme ceci:
DEFINED_MACRO = ABC
target.o: file.c
gcc -D$(DEFINED_MACRO)=3 -o target.o file.c