我到处搜索,我找不到这个功能。这可能是不可能的。我希望在执行食谱之前和之后运行一些东西。我预计它看起来像这样:
.BEFORE:
echo "Hello world"
.AFTER:
echo "Goodbye cruel world"
foo.txt:
touch foo.txt
如此输出:
Hello World
touch foo.txt
Goodbye cruel world
这可行吗?
答案 0 :(得分:1)
targets := foo.txt
.PHONY: after before
after: $(targets)
@echo "Goodbye cruel world"
$(targets): before
before:
@echo "Hello world"
foo.txt:
touch foo.txt
我之前的建议每次运行foo.txt
的配方,因为它取决于.PHONY
目标。如果您对此感到满意,那么您也可以使用双冒号规则,这也将解决有关多个目标的问题。
targets := foo.txt
$(targets)::
@echo "Hello world"
foo.txt::
touch $@
$(targets)::
@echo "Goodbye cruel world"
如果foo.txt
最终拥有自己的先决条件,那么此问题应该自行解决,当然现在的问题是前后规则将针对每个目标执行一次。