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

问题描述 投票:0回答:5

我想用 autoconf/automake 编译我的项目。我的configure.ac中定义了2个条件

AM_CONDITIONAL(HAVE_CLIENT, test $enable-client -eq 1)
AM_CONDITIONAL(HAVE_SERVER, test $enable-server -eq 1)

我想将 _LIBS 与 Makefile.am 中的这 2 个条件分开

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'?

automake
5个回答
172
投票

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

17
投票

如果我是你,我会接受 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

(缩进是为了清晰起见。不要缩进线条,它们不起作用。


16
投票
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

7
投票
ifdef $(HAVE_CLIENT)
libtest_LIBS = \
    $(top_builddir)/libclient.la
别的
ifdef $(HAVE_SERVER)
libtest_LIBS = \
    $(top_builddir)/libserver.la
别的
libtest_LIBS =
万一
万一

注意:不要缩进 if 那么它不起作用!


6
投票

正如您所发现的,您不能这样做。你可以这样做:

libtest_LIBS = 

...

if HAVE_CLIENT
libtest_LIBS += libclient.la
endif

if HAVE_SERVER
libtest_LIBS += libserver.la
endif
© www.soinside.com 2019 - 2024. All rights reserved.