我已经到处搜索了,但是没有找到这个功能。可能根本不可能实现。我想要在执行菜谱之前和之后运行某些东西。我认为它看起来应该像这样:
.BEFORE:
echo "Hello world"
.AFTER:
echo "Goodbye cruel world"
foo.txt:
touch foo.txt
输出结果如下:
Hello World
touch foo.txt
Goodbye cruel world
这能行吗?
我已经到处搜索了,但是没有找到这个功能。可能根本不可能实现。我想要在执行菜谱之前和之后运行某些东西。我认为它看起来应该像这样:
.BEFORE:
echo "Hello world"
.AFTER:
echo "Goodbye cruel world"
foo.txt:
touch foo.txt
输出结果如下:
Hello World
touch foo.txt
Goodbye cruel world
这能行吗?
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
具有自己的先决条件,那么这个问题应该会自行解决。当然,现在的问题是每个目标都会执行前面和后面的规则。