显然 GNU Make 条件中没有布尔类型,所以这似乎是最好的解决方案:
$(DEF_TARGET):
if [ "$(CHECK)" != "y" ]; then \
var=foo; \
$(if $(filter foo,$(var)),result=true,result=false); \
fi
Run Code Online (Sandbox Code Playgroud)
问题是,无论是var=foo还是var=bar,result永远都是false。替换$(var)为foo或bar将产生正确的结果。
为什么这不起作用?有没有更好的解决问题的方法?
使用命令运行以下 makefile make -f make.txt
.PHONY: all
all:
X=aaa; \
Y=aaa; \
if [[ '$(filter $(X),$(Y))' ]]; then echo "matched!"; else echo "not matched!"; fi
Run Code Online (Sandbox Code Playgroud)
输出:
X=aaa; \
Y=aaa; \
if [[ '' ]]; then echo "matched!"; else echo "not matched!"; fi
not matched! …Run Code Online (Sandbox Code Playgroud)