2016-08-22 2 views

Répondre

1

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) 
1

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