C 如何在Makefile.am中使用条件

C 如何在Makefile.am中使用条件,c,makefile,autotools,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 __abs_top_srcdir__bin_myprogram_SOURCES=main.c some.c anothercode.c if ALSA _

在configure.ac中,我设置了变量ALSA=1或什么都没有

./configure --enable-alsa=yes
or
./configure //nothing
我需要将源代码alsa.c添加到Makefile.am:

__abs_top_srcdir__bin_myprogram_SOURCES+=alsa.c
__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.am:

__abs_top_srcdir__bin_myprogram_SOURCES+=alsa.c
__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变量吗?谢谢你的帮助

改变这一点:

__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])],[])