ifdef in Makefile.am



我想使用标志来编译我的 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的引用。

最新更新