在生成文件中,我可以从另一个规则中调用一个规则吗?
如同:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
Answers:
使用依赖关系或递归方法将一条规则连接到另一条规则。
依赖关系将这样完成(尽管顺序会有所不同):
rule1:
echo "bye"
rule2:
date
rule3: rule1
@echo "hello"
递归生成将像这样完成(尽管它确实涉及子流程):
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
$(MAKE) rule1
两者都不是完美的。确实,使用递归可使您在构建循环时遇到重大问题。您可能还应该添加一条.PHONY
规则,以将上面的那些规则标记为合成规则,以便目录中的流浪rule1
(等)不会引起混乱。
只需添加具有所需顺序的新规则即可。
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule4: rule3 rule1
make -j2
例如)将给您不确定的执行顺序。
rule4: | rule3 rule1
Makefile不是程序性的;“规则”不像功能。也就是说,您可以指定一个规则是另一个规则的先决条件:
rule1:
@echo "Rule 1"
rule2: rule1
@echo "Rule 2"
如果这样做make rule2
,您应该看到:
Rule 1
Rule 2
GNU Make中有两个高级功能可以执行此操作,尽管仅应在恶劣的情况下使用。该SO在google中排名最高。
推荐使用规则先决条件,但有时您需要后置条件。
本质上,Eval允许您即时构建目标,而Call允许创建“定义”之类的功能。