Makefile.am中的ifdef

3

我想使用标志来编译我的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有什么问题?

谢谢。


1
似乎你的许多问题都未被采纳。是否有这么多答案很弱? - chux - Reinstate Monica
1个回答

5
为了在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"])

这意味着我们可以调用configure来启用模型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 周围没有引号的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接