如何在 makefile.am 中设置我可以在代码中使用的宏
how to set macro in makefile.am that i can used in code
如何在 makefile.am 中设置我可以在代码中使用的宏,例如 #ifdef ABC
,其中 ABC
变量在 makefile.am 中定义但可以在代码。我读过这个 question,这是关于如何在 makefile 中设置宏而不是 makefile.am
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
a Makefile.am
是 Makefile
的模板(好吧,Makefile.in
是最终 Makefile
的模板)。
虽然 automake 会在 Makefile.am
-> Makefile.in
翻译中生成相当多的代码,但它会保留部分不变,允许您插入自己的 make-code。
典型的(演示)Makefile.am 看起来像:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c
foo_CPPFLAGS = -DFOO
编译 foo
程序时将定义 FOO
(它向预处理器标志添加“-DFOO”)。
一个更复杂(和不寻常)的示例可能如下所示:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c abc.c
foo_CPPFLAGS = -D@FOODEF@
configure.ac 包含如下内容:
FOODEF=KNURK
AC_SUBST(FOODEF)
相当于在每个源文件中为 foo
提供 #define KNURK
以上是非典型的,因为通常您会替换 "self-contained" 标志,例如类似下面的 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)
如何在 makefile.am 中设置我可以在代码中使用的宏,例如 #ifdef ABC
,其中 ABC
变量在 makefile.am 中定义但可以在代码。我读过这个 question,这是关于如何在 makefile 中设置宏而不是 makefile.am
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
a Makefile.am
是 Makefile
的模板(好吧,Makefile.in
是最终 Makefile
的模板)。
虽然 automake 会在 Makefile.am
-> Makefile.in
翻译中生成相当多的代码,但它会保留部分不变,允许您插入自己的 make-code。
典型的(演示)Makefile.am 看起来像:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c
foo_CPPFLAGS = -DFOO
编译 foo
程序时将定义 FOO
(它向预处理器标志添加“-DFOO”)。
一个更复杂(和不寻常)的示例可能如下所示:
bin_PROGRAMS = foo
foo_SOURCES = xyz.c abc.c
foo_CPPFLAGS = -D@FOODEF@
configure.ac 包含如下内容:
FOODEF=KNURK
AC_SUBST(FOODEF)
相当于在每个源文件中为 foo
#define KNURK
以上是非典型的,因为通常您会替换 "self-contained" 标志,例如类似下面的 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)