Makefile函数内变量展开异常:Canned Recipes变量未正常解析
Makefile Canned Recipes变量展开失效的解决方法
问题出在canned recipe里的嵌套变量引用未正确转义$符号,导致Make在call阶段就提前尝试展开未完成定义的变量,最终输出空值。
修正后的代码
define project $(1)_dir := $(realpath $(2)) .PHONY: $(1) $(1): $(info $(1)_dir = "$$($(1)_dir)") endef $(eval $(call project,hello_world,./hello-world))
关键说明
原代码中$($(1)_dir)的写法会让Make在call替换参数时,直接尝试展开$($(1)_dir)——此时$(1)_dir对应的变量还未完成定义,所以得到空值。
将$($(1)_dir)改为$$($(1)_dir)后,call展开时$$会被替换为单个$,最终规则里的命令变为$(info hello_world_dir = "$(hello_world_dir)")。当执行make hello_world时,Make会正确引用之前定义的hello_world_dir变量,输出预期的路径。
内容的提问来源于stack exchange,提问作者JeremyEastham
相关产品推荐
相关产品推荐

