2016-08-22 5 views

答えて

1

Makefile.amはテンプレートですMakefile(よく、MakefileのテンプレートであるMakefile.inの場合)。 automakeはMakefile.am - >Makefile.inの翻訳で非常に多くのコードを生成しますが、パーツを手作業で残しておき、独自のmakeコードを挿入することができます。

fooプログラムをコンパイルするとき(それはプリプロセッサフ​​ラグに '-Dfoo' を追加します) FOOが定義されています
bin_PROGRAMS = foo 
foo_SOURCES = xyz.c 
foo_CPPFLAGS = -DFOO 

典型的な(デモ)Makefile.amは次のようになります。

より複雑な(そして珍しい)の例では、見ることができるように:各ソースに#define KNURKを有すると同等を提供

FOODEF=KNURK 
AC_SUBST(FOODEF) 

:のようなものが含まconfigure.acと

bin_PROGRAMS = foo 
foo_SOURCES = xyz.c abc.c 
foo_CPPFLAGS = [email protected]@ 

-file for foo

上記は典型的ではないため、通常は「自己完結型」フラグを置き換えます。以下のMakefile.am、のようなもの:

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) 

bin_PROGRAMS = foo 
foo_SOURCES = xyz.c abc.c 
foo_CPPFLAGS = @[email protected] -I/usr/include/fu/ 

のようなconfigure.acスニペットを伴います

1

makefile自体はあなたのコードを気にしません。それはコンパイラの仕事です。

あなたはGCCを使用している場合は、このような-Dオプションでシンボルを定義することができます:あなたは、もちろん、このようなMakefileの変数を使用することができます

gcc -DABC=3 -o main.o main.c 

DEFINED_MACRO = ABC 
target.o: file.c 
    gcc -D$(DEFINED_MACRO)=3 -o target.o file.c 
関連する問題