Make:动态执行规则

时间:2019-07-12 14:52:17

标签: makefile gnu-make

使用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规则?

1 个答案:

答案 0 :(得分:2)

首先,您滥用ifneq ---它总是在第一遍处理,即在任何与食谱相关的内容之前处理。所以这不是一个选择。

第二,在make foo barmake bar foo上表现不同是不好的设计,因为它中断了使用-jN选项的并行处理。您应该修改逻辑:foo必须依赖bar,或者bar必须依赖foo,或者它们必须彼此完全独立。

相关问题