如果其他语法在GNU makefile中评估错误的子句



我正在尝试如果其他语法在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

相关内容

  • 没有找到相关文章

最新更新