4
我剛剛開始真正瞭解make的內部工作原理。但我不明白爲什麼下面不工作:Makefile通配符(靜態規則?)假冒
test%: test%.foo
@echo [email protected]
@echo $<
all: test1 test2
.PHONY: all test1 test2
預期的行爲:
$ make
test1
test1.foo
test2
test2.foo
# 1,2 Order not important
不過,我得到:
$ make
make: Nothing to be done for `all'.
( 「讓所有」,「使test1「等沒有區別)。
有人可以解釋爲什麼PHONY測試規則沒有被執行嗎?
啊,最後一點「所有模式規則都是隱含的規則」,這對我來說是新的。在這種情況下,是否可以強制執行我想要的操作? – Pat
使'test1'和'test2'不僞造,例如通過添加@ touch $ @'。 – reinierpost
@reinierpost:它不會改變任何東西來擁有實際的'test1'和'test2'文件。它們在Makefile中被定義爲假,所以它們是假的,而不管現有的文件。爲了讓它們變得非虛假,唯一的方法就是將它們從'.PHONY'規則中移除。 –