使用GNU-Make,
假设我写了以下内容:
.PHONY: foo bar
foo:
$(eval foo:=1)
@echo foo
bar:
ifneq (${foo},)
@echo bar
endif
然后我执行以下命令:
$: make foo
foo
$: make bar
bar
$: make bar foo
bar
foo
$: make foo bar
foo
bar
但是,我试图使最后两个命令出现以下结果,最好不要放入shell代码中
$: make foo bar
foo
$: make bar foo
bar
foo
如何使if防护程序动态禁止bar
规则?
答案 0 :(得分:2)
首先,您滥用ifneq
---它总是在第一遍处理,即在任何与食谱相关的内容之前处理。所以这不是一个选择。
第二,在make foo bar
和make bar foo
上表现不同是不好的设计,因为它中断了使用-jN
选项的并行处理。您应该修改逻辑:foo必须依赖bar,或者bar必须依赖foo,或者它们必须彼此完全独立。