gpt4 book ai didi

makefile - makefile 条件中的多个 if 语句

转载 作者:行者123 更新时间:2023-12-04 22:57:07 35 4
gpt4 key购买 nike

make 文档说明了 的语法复杂条件 如下:

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

但是我不明白如何使用这种语法来重写以下代码:
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: ;

最佳答案

使用你的makefile:

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)

我收到以下错误:
$ make
Makefile:4: Extraneous text after `else' directive
Makefile:6: *** commands commence before first target. Stop.

根据@MadScientist 的建议编辑 makefile(即 ifeq 之后的空格):
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)

我得到:
$ make
Makefile:9: *** commands commence before first target. Stop.

这就是说你不能使用命令,除非它是规则的一部分。如果你想记录类似的东西,试试这样:
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

由此,我得到:
$ make
CC is mipsel-linux-gcc
foo

https://www.gnu.org/software/make/manual/html_node/Make-Control-Functions.html#index-error有关 $(info ...) 的更多信息- 如果你愿意,你可以把它放在条件语句中,但为什么要这样呢? :->

关于makefile - makefile 条件中的多个 if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40217192/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com