我正在尝试如果其他语法在makefile中工作
TYPE=src
RTL=src
program_%:
ifeq ($(TYPE),$(RTL))
echo "RTL"
else
echo "Test"
endif
这是命令行
$make -f test.make prog_src
我在输出中得到以下内容
echo "RTL"
RTL
但是,当我更改if语句时,以至于代替硬编码变量,我会做
之类的事情program_%:
ifeq ($(TYPE),$*)
echo "RTL"
else
echo "Test"
endif
,运行如下
$make -f test.make prog_src
我得到了错误的子句
echo "Test"
Test
删除条件下的白空间
ifeq ($(TYPE),$(RTL))
关于问题的第二部分:
否;在Makefile的上下文中,不可能评估ifeq
,并且$*
不会在此处扩展。您可以尝试$(if ...)
,但是检查平等是不可能的:
program_%:
@echo $(if $(filter ${TYPE},$*),"RTL","Test")
" makefile的上下文"表示if*
仅看到全局变量。诸如$*
之类的特殊变量仅在规则上下文中可用。
复杂规则
可以通过
进行复杂规则define complex_rule_A
@echo "complex_rule_A"
@echo "done"
endef
define complex_rule_B
@echo "complex_rule_B"
@echo "failed"
endef
program_%:
$(if $(filter ${TYPE},$*),$(call complex_rule_A),$(call complex_rule_B))
替代解决方案
当${TYPE}
可以列举时,更干净的解决方案可能是
program_%: .program_${TYPE}_%
:
.program_RTL_%:
echo else
.program_RTL_RTL:
echo RTL