這裏是我的Makefile的簡化版本:Makefile的依賴沒有爲假目標工作
.PHONY: all
all: src/server.coffee
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
我想運行make
,只有把它重新編譯時src/server.coffee
發生了變化。然而,重新編譯每次運行make
時間:
$ make
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
$ make
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
如果我改變我的Makefile中不使用假目標,它按預期工作。新的Makefile:
bin/server.js: src/server.coffee
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
結果:
$ make
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
$ make
make: `bin/server.js' is up to date.
爲什麼不尊重它與假目標我的依賴呢?我問的原因是因爲在現實中,我不會僅僅將一個文件編譯到一個單獨的文件中,所以我不想跟蹤所有輸出文件的名稱作爲目標。
要清楚,一個**空目標**必須是一個文件,真的只是用於它的時間戳嗎?是否還有其他類型的'.PHONY'允許目標規則擁有一個配方體(使用執行的命令)*和*僅在依賴關係需要更新時才運行?它看起來很破碎,因爲根據它是否有配方體,'.PHONY'做了不同的事情。 – jozxyqk