在makefile中,我可以从另一个规则调用规则吗?
相近:
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule1
Run Code Online (Sandbox Code Playgroud)
Don*_*ows 97
使用依赖关系或递归制作从一个规则连接到另一个规则.
依赖关系会这样做(尽管顺序会有所不同):
rule1:
echo "bye"
rule2:
date
rule3: rule1
@echo "hello"
Run Code Online (Sandbox Code Playgroud)
递归make会像这样完成(虽然它涉及一个子进程):
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
$(MAKE) rule1
Run Code Online (Sandbox Code Playgroud)
两者都不完美; 事实上,如果你构建一个循环,你可以通过递归使你遇到重大问题.您也可能应该添加一条.PHONY规则,以便将上述规则标记为合成规则,以便目录中的杂散rule1(等)不会引起混淆.
Joh*_*rry 22
只需添加您想要的订单的新规则..
rule1:
echo "bye"
rule2:
date
rule3:
@echo "hello"
rule4: rule3 rule1
Run Code Online (Sandbox Code Playgroud)
Oli*_*rth 19
Makefile不是程序性的; "规则"与功能不同.也就是说,您可以指定一个规则是另一个规则的先决条件:
rule1:
@echo "Rule 1"
rule2: rule1
@echo "Rule 2"
Run Code Online (Sandbox Code Playgroud)
如果你这样做make rule2,你应该看到:
Rule 1
Rule 2
Run Code Online (Sandbox Code Playgroud)
GNU Make 中有两个高级函数可以做到这一点,尽管它只能在情有可原的情况下使用。这个SO在谷歌中排名最高。
更建议使用规则先决条件,但有时您需要后置先决条件。
从本质上讲,Eval 允许您动态构建目标,而 Call 允许创建“定义”等函数。