我想使用标志来编译我的 C 项目:
在 configure.ac 我定义默认模型
AC_ARG_ENABLE(model, [AS_HELP_STRING([--enable-model],
[specify which Model will be used; (default --enable-model=98]))],,
[AC_DEFINE(MODEL_98)])
AS_IF([test "x$enable_model" = "x98"], [AC_DEFINE(MODEL_98)])
AS_IF([test "x$enable_model" = "x181"], [AC_DEFINE(MODEL_181)])
然后在 Makefile.am 中,我使用这些变量如下:
proj_SOURCES =
../bac.c
../conf.c
../cw.c
ifdef $(MODEL_98)
proj_SOURCES +=
../dm/98/interfaces.c
../dm/98/device.c
../dm/98/ging.c
../dm/98/wa.c
endif
ifdef $(MODEL_181)
proj_SOURCES +=
../dm/181/fi.c
endif
但是该项目无法编译!
我的 Makefile.am 出了什么问题
谢谢
Makefiles 中的变量,您需要使用automake
版本,即AM_*
不是AC_
。
我会使用AM_CONDITIONAL
.对于您的示例:
configure.ac:
AC_ARG_ENABLE([model],
[AS_HELP_STRING([--enable-model],
[specify which Model will be used; (default --enable-model=98]))],
[enable_model=$enableval],
[enable_model=98])
AM_CONDITIONAL([MODEL_98], [test "x$enable_model" = "x98"])
AM_CONDITIONAL([MODEL_181], [test "x$enable_model" = "x181"])
这意味着我们可以调用配置以启用模型 98 作为
-
./configure
-
./configure --enable-model=98
然后,您还可以通过调用配置为./configure --enable-model=181
来启用 181。或者就此而言,我们设置的任何型号enable_model
为传入的值。
然后在您的 Makefile.am 中:
proj_SOURCES =
../bac.c
../conf.c
../cw.c
if MODEL_98
proj_SOURCES +=
../dm/98/interfaces.c
../dm/98/device.c
../dm/98/ging.c
../dm/98/wa.c
endif
if MODEL_181
proj_SOURCES +=
../dm/181/fi.c
endif
请注意使用if
而不是ifdef
,并且缺乏围绕MODEL_98
的引用。