2016-03-08 37 views
1

我想用标志来编译我的C项目:IFDEF在Makefile.am

在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

感谢

+0

看起来像你的许多问题的一半被接受。那么多的答案很弱? – chux

回答

3

为了使用变量Makefile中,你需要使用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

然后你c也可以通过调用配置为./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