如何使用“else if”在Makefile.am中编写多个条件

时间:2011-11-09 02:01:53

标签: automake

我想用autoconf / automake编译我的项目。我的configure.ac

中定义了两个条件
AM_CONDITIONAL(HAVE_CLIENT, test $enable-client -eq 1)
AM_CONDITIONAL(HAVE_SERVER, test $enable-server -eq 1)

我想在Makefile.am

中将_LIBS与这两个条件分开
if HAVE_CLIENT

libtest_LIBS = \

    $(top_builddir)/libclient.la

else if HAVE_SERVER

libtest_LIBS = \

    $(top_builddir)/libserver.la

else

libtest_LIBS = 

endif

else if HAVE_SERVER不起作用。

如何在makefile.am中写'else if'?

5 个答案:

答案 0 :(得分:93)

ptomato的代码也可以用更清洁的方式编写,如:

ifeq ($(TARGET_CPU),x86)
  TARGET_CPU_IS_X86 := 1
else ifeq ($(TARGET_CPU),x86_64)
  TARGET_CPU_IS_X86 := 1
else
  TARGET_CPU_IS_X86 := 0
endif

这不符合OP的问题,但由于这是谷歌的最佳结果,我在这里添加它,以防它对其他人有用。

答案 1 :(得分:15)

如果我是你,我会接受ldav1s的答案,但我只想指出'else if'可以用'else'和'if'用任何语言写成:

if HAVE_CLIENT
  libtest_LIBS = $(top_builddir)/libclient.la
else
  if HAVE_SERVER
    libtest_LIBS = $(top_builddir)/libserver.la
  else
    libtest_LIBS = 
  endif
endif

(缩进是为了清晰。不要缩进行,它们将无效。

答案 2 :(得分:10)

ifeq ($(CHIPSET),8960)
   BLD_ENV_BUILD_ID="8960"
else ifeq ($(CHIPSET),8930)
   BLD_ENV_BUILD_ID="8930"
else ifeq ($(CHIPSET),8064)
   BLD_ENV_BUILD_ID="8064"
else ifeq ($(CHIPSET), 9x15)
   BLD_ENV_BUILD_ID="9615"
else
   BLD_ENV_BUILD_ID=
endif

答案 3 :(得分:5)

正如您所发现的那样,您无法做到这一点。你可以这样做:

libtest_LIBS = 

...

if HAVE_CLIENT
libtest_LIBS += libclient.la
endif

if HAVE_SERVER
libtest_LIBS += libserver.la
endif

答案 4 :(得分:3)

ifdef $(HAVE_CLIENT)
libtest_LIBS = \
    $(top_builddir)/libclient.la
else
ifdef $(HAVE_SERVER)
libtest_LIBS = \
    $(top_builddir)/libserver.la
else
libtest_LIBS = 
endif
endif

注意:如果它不起作用,请不要缩进!