如何在Makefile.am中使用条件

时间:2014-05-08 06:33:47

标签: c makefile autotools

来自configure.ac的

我设置了变量ALSA = 1或没有

./configure --enable-alsa=yes
or
./configure //nothing

我需要将源代码alsa.c添加到Makefile.am:

__abs_top_srcdir__bin_myprogram_SOURCES+=alsa.c

我试过了: Makefile.am:

__abs_top_srcdir__bin_myprogram_SOURCES=main.c some.c anothercode.c
if ALSA
     __abs_top_srcdir__bin_myprogram_SOURCES+=alsa.c
else
     __abs_top_srcdir__bin_myprogram_SOURCES+=somethingelse.c
endif

它创造了 Makefile.in以

结尾
@ALSA_TRUE@     __abs_top_srcdir__bin_myprogram_SOURCES += \
@ALSA_TRUE@     alsa.c
@ALSA_FALSE@    __abs_top_srcdir__bin_myprogram_SOURCES += \
@ALSA_FALSE@    somethingelse.c

和Makefile以:

结尾
#       __abs_top_srcdir__bin_myprogram_SOURCES += \
#       alsa.c
        __abs_top_srcdir__bin_myprogram_SOURCES += \
        somethingelse.c

但是我需要在这个文件的顶部包含其他源代码文件,因为这个Makefile不起作用。我希望你理解我:)。

和configure.ac的相关部分:

AC_ARG_ENABLE(alsa,
  AS_HELP_STRING(
    [--enable-alsa],
    [enable alsa, default: no]),
    [case "${enableval}" in
      yes)  alsa=true ;;
      no)   alsa=false ;;
      *)   AC_MSG_ERROR([bad value ${enableval} for --enable-alsa]) ;;
    esac],
    [alsa=false])
AM_CONDITIONAL(ALSA, test x"$alsa" = x"true")
AM_COND_IF(ALSA, 
    AC_DEFINE(ALSA, 1, [Define to 0 for Something else]),[])

有什么不对?我可以使用这样的ALSA变量吗?谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

改变这个:

__abs_top_srcdir__bin_myprogram_SOURCES=main.c some.c anothercode.c
if ALSA
     __abs_top_srcdir__bin_myprogram_SOURCES+=alsa.c
else
     __abs_top_srcdir__bin_myprogram_SOURCES+=somethingelse.c
endif

到此:

__abs_top_srcdir__bin_myprogram_SOURCES=main.c some.c anothercode.c
if ALSA
__abs_top_srcdir__bin_myprogram_SOURCES+=alsa.c
else
__abs_top_srcdir__bin_myprogram_SOURCES+=somethingelse.c
endif

它应该有用。

顺便说一句,你还要使configure.ac中的代码过于复杂。这也会做同样的事情:

AC_ARG_ENABLE(alsa,
  AS_HELP_STRING(
    [--enable-alsa],
    [enable alsa, default: no]))
AM_CONDITIONAL([ALSA], [test "x$enable_alsa" = "xyes"])
AM_COND_IF([ALSA],
    [AC_DEFINE(ALSA, 1, [Define to 0 for Something else])],[])