2011-11-09 120 views
39

我想用autoconf/automake编译我的项目。有我在configure.ac定义2个条件如何在“else if”中写入Makefile.am中的多个条件

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

我想_LIBS从这些2个条件Makefile.am

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

回答

3

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

libtest_LIBS = 

...

if HAVE_CLIENT 
libtest_LIBS += libclient.la 
endif 

if HAVE_SERVER 
libtest_LIBS += libserver.la 
endif 
+0

是的,这很好。感谢您的回复,但实际上我有3个条件。客户端,服务器,非客户端非服务器。我不知道如何在我的代码中添加第三个条件。 – Wind

+0

AM_CONDITIONAL实际上有4个条件:!客户&&!服务器,!客户&&服务器,客户&服务器,客户&&!!服务器。这个答案将适用于所有这些条件。对于“第三种情况”(!CLIENT &&!SERVER),libtest_LIBS在'else if'中设置为您想要的值。 – ldav1s

13

我会接受ldav1s'的答案,如果我是你,但我只是想指出的是,‘否则,如果’可在条件写入“其他”和'如果在任何语言:(缩进是为了清晰不要缩进线,他们将无法正常工作

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

+0

我试过这个,但失败了。是否有可能Makefile.am不支持递归如果条件。 – Wind

+0

您是否删除了缩进?所有这些陈述都应该从第1列开始。 – ptomato

+0

对不起,我没有删除缩进,我会尝试。 – Wind

72

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的问题,但因为它是在谷歌上的结果,我的情况下,这里将它是非常有用的人其他。

+7

但是在这里你需要把两个'endif'放在同一个缩进级别,在上面的例子中,这个总体上看起来不是很好 – amc

+1

@amc单个'endif'就足够了,我刚刚添加了这个。所有情况下都会给出缩进问题(当使用更大/嵌套的'else'块时)。 – blueyed

9
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 
1
 
ifdef $(HAVE_CLIENT) 
libtest_LIBS = \ 
    $(top_builddir)/libclient.la 
else 
ifdef $(HAVE_SERVER) 
libtest_LIBS = \ 
    $(top_builddir)/libserver.la 
else 
libtest_LIBS = 
endif 
endif 

注意:不要缩进如果那么它不工作!