这是我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
根据是否具有配方主体来执行不同的操作似乎存在问题。 - jozxyqk