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

Win*_*ind 53 automake

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

AM_CONDITIONAL(HAVE_CLIENT, test $enable-client -eq 1)
AM_CONDITIONAL(HAVE_SERVER, test $enable-server -eq 1)
Run Code Online (Sandbox Code Playgroud)

我想在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
Run Code Online (Sandbox Code Playgroud)

else if HAVE_SERVER不起作用.

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

R.D*_*.D. 103

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的问题,但由于这是谷歌的最高结果,我在这里添加它,以防它对其他人有用.

  • 但是在这里你需要将两个`endif`放在同一级别的缩进处,这样看起来也不好看 (7认同)
  • 继续本着“因为它是谷歌上的最高结果”的精神:)如果你想复制这个,请确保你不要忘记`else ifeq (…)`中括号前的空格。如果缺少“make”,它会变得混乱,并且会提前结束条件。 (2认同)
  • 您不能在Makefile.am中使用此语法 (2认同)
  • GNU Make 3.80 会失败。错误消息是,*`“else”指令后有多余文本。`*。 (2认同)

pto*_*ato 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
Run Code Online (Sandbox Code Playgroud)

(缩进是为了清楚.不要缩进线条,它们将无法工作.)

  • 您是否删除了缩进?所有这些语句应该从第1列开始。 (2认同)
  • 您可以在第 2、5 和 7 行中使用缩进。(仅限制表符,不能使用空格)只有 if、else 和 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
Run Code Online (Sandbox Code Playgroud)

  • GNU Make 3.80 会失败。错误消息是,*`“else”指令后有多余文本`*。 (5认同)

lda*_*v1s 5

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

libtest_LIBS = 
Run Code Online (Sandbox Code Playgroud)

...

if HAVE_CLIENT
libtest_LIBS += libclient.la
endif

if HAVE_SERVER
libtest_LIBS += libserver.la
endif
Run Code Online (Sandbox Code Playgroud)


小智 5

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

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