首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >makefile条件词中的多个if语句

makefile条件词中的多个if语句
EN

Stack Overflow用户
提问于 2016-10-24 11:26:34
回答 2查看 19.3K关注 0票数 6

make文档指出,复合条件的语法如下:

代码语言:javascript
运行
复制
conditional-directive-one
text-if-one-is-true
else conditional-directive-two
text-if-two-is-true
else
text-if-one-and-two-are-false
endif

但是,我不明白如何使用这个语法重写以下代码:

代码语言:javascript
运行
复制
ifeq ($(option), 1)
CC=gcc
@echo use gcc
else ifeq($(option), 2)
CC=clang
@echo use clang
else
CC=mipsel-linux-gcc
@echo use mipsel-linux-gcc
endif

#first target
foo: ;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-31 11:35:28

IMHO,ifeq语句占用了太多的空间,很难输入和阅读。一个更好的选择:

代码语言:javascript
运行
复制
CC.1 := gcc
CC.2 := clang
CC := $(or ${CC.${option}},mipsel-linux-gcc)
$(info "Using ${CC}")
票数 7
EN

Stack Overflow用户

发布于 2016-10-31 11:10:47

使用makefile:

代码语言:javascript
运行
复制
ifeq ($(option), 1)
    CC=gcc
    @echo use gcc
else ifeq($(option), 2)
    CC=clang
    @echo use clang
else
    CC=mipsel-linux-gcc
    @echo use mipsel-linux-gcc
endif

#first target
foo:
    echo CC $(CC)

我得到以下错误:

代码语言:javascript
运行
复制
$ make
Makefile:4: Extraneous text after `else' directive
Makefile:6: *** commands commence before first target.  Stop.

编辑makefile,根据@Mad科学家的建议(即ifeq之后的空格):

代码语言:javascript
运行
复制
ifeq ($(option), 1)
    CC=gcc
    @echo use gcc
else ifeq ($(option), 2)
    CC=clang
    @echo use clang
else
    CC=mipsel-linux-gcc
    @echo use mipsel-linux-gcc
endif

#first target
foo:
    echo CC $(CC)

我得到:

代码语言:javascript
运行
复制
$ make
Makefile:9: *** commands commence before first target.  Stop.

这就是说,除非命令是规则的一部分,否则不能使用命令。如果您想记录类似的内容,请尝试如下:

代码语言:javascript
运行
复制
ifeq ($(option), 1)
    CC=gcc
else ifeq ($(option), 2)
    CC=clang
else
    CC=mipsel-linux-gcc
endif

$(info CC is $(CC))

#first target
foo:
    @echo foo

从这个,我得到:

代码语言:javascript
运行
复制
$ make
CC is mipsel-linux-gcc
foo

有关node/Make-Control-Functions.html#index-error的更多信息,请参见$(info ...) --如果需要,可以将其放入条件词中,但为什么要这样做呢?:->

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40217192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档