如何在makefile.am中设置我可以在代码中使用的宏,例如#ifdef ABC
,其中ABC
变量在makefile.am中定义但可以在代码中使用。我已经阅读了这个question,这是关于如何在makefile中设置宏而不是makefile.am
答案 0 :(得分:1)
Makefile.am
是Makefile
的模板(嗯,Makefile.in
是最终Makefile
的模板)。
虽然automake会在Makefile.am
- >中生成大量代码。 Makefile.in
翻译,它会保留部分不变,允许您插入自己的make代码。
一个典型的(演示)Makefile.am看起来像:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c
foo_CPPFLAGS = -DFOO
在编译FOO
程序时会定义foo
(它会为预处理程序标记添加' -DFOO和#39}。
更复杂(和不寻常)的示例可能如下所示:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c abc.c
foo_CPPFLAGS = -D@FOODEF@
使用包含以下内容的configure.ac:
FOODEF=KNURK
AC_SUBST(FOODEF)
,相当于#define KNURK
foo
以上是非典型的,因为通常你会取代"自足的"标志,例如类似下面的Makefile.am:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c abc.c
foo_CPPFLAGS = @FOODEFS@ -I/usr/include/fu/
附带一个configure.ac代码段,如:
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 :(得分:0)
makefile本身并不关心你的代码,编译与否。这是编译器的工作。
如果您使用GCC,您可以使用-D选项定义符号,如下所示:
gcc -DABC=3 -o main.o main.c
您当然可以使用这样的Makefile变量:
DEFINED_MACRO = ABC
target.o: file.c
gcc -D$(DEFINED_MACRO)=3 -o target.o file.c