我试图在Makefile中使用if else语法
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
答案 0 :(得分:2)
删除条件
中的空格ifeq ($(TYPE),$(RTL))
没有;这是不可能的ifeq
在makefile的上下文中进行评估,$*
不会在那里扩展。您可以尝试$(if ...)
,但不能直接检查相等性:
program_%:
@echo $(if $(filter ${TYPE},$*),"RTL","Test")
“makefile的上下文”意味着if*
只能看到全局的make变量。像$*
这样的特殊变量仅在规则上下文中可用。
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