Makefile 我可以将ifeq/else if eq/else语法与任何条件一起使用吗?或者我必须只测试一个变量和多个值。(就像一个案例。)

Makefile 我可以将ifeq/else if eq/else语法与任何条件一起使用吗?或者我必须只测试一个变量和多个值。(就像一个案例。),makefile,gnu-make,Makefile,Gnu Make,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 但是,我看到的所有示例中,每个“条件指令-n”都在测试与第一个条件指令相同的$var。实际上,它就像一个case语句,针对多个可能的值测试一个变量。像这样: ifeq ($(opt

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
但是,我看到的所有示例中,每个“条件指令-n”都在测试与第一个条件指令相同的$var。实际上,它就像一个case语句,针对多个可能的值测试一个变量。像这样:

ifeq ($(option), 1)
    CC=gcc
else ifeq ($(option), 2)
    CC=clang
else
    CC=mipsel-linux-gcc
endif
我的问题是,这是一项要求吗?或者我可以像这样完成不同的条件指令:

ifeq ($(option), 1)
    CC=gcc
else ifeq ($(myhostname), "JohnsLaptop")
    CC=johnsCompiler
else
    CC=
endif
那么,它真的只是case语句的一种时髦语法,还是每个“else-ifeq”都是独立的呢

我知道我能做到:

ifeq ($(option), 1)
    CC=gcc
else
ifeq ($(myhostname), "johnsLaptop")
    CC=johnsCompiler
else
    CC=mipsel-linux-gcc
endif
endif

但这很难看。如果不需要的话,我不希望嵌套if/else而没有缩进。

我在非标准版本的make上测试了这一点,答案是每个条件指令都是独立的。多亏了来自的评论,这似乎证实了这也是标准和gnumake的正确答案\

此代码适用于:

ifneq ($(findstring mbist_rtl,$@),)
    RTL_OPT = mixed findSrc_targets_memwrap.ini
else ifeq ($(DFT), 1)
    RTL_OPT = dft
else ifeq ($(BB), 1)
    RTL_OPT = ndft
else
    RTL_OPT = syn
endif

我是说,你可以试试看,比你要求我们的速度快。但答案是,每个条件都是独立的。没有必要以任何方式关联任何条件。是的,我可以并且确实测试了它,但是我的make版本是非标准的,我想知道“标准”make规则是什么。谢谢你的回答!