这是我的Makefile的简化版本:
.PHONY: all
all: src/server.coffee
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
Run Code Online (Sandbox Code Playgroud)
我想运行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
Run Code Online (Sandbox Code Playgroud)
如果我将Makefile更改为不使用虚假目标,它将按预期工作.新的Makefile:
bin/server.js: src/server.coffee
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
Run Code Online (Sandbox Code Playgroud)
结果:
$ make
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
$ make
make: `bin/server.js' is up to date.
Run Code Online (Sandbox Code Playgroud)
为什么它不尊重我对虚假目标的依赖?我问的原因是因为实际上,我不会将单个文件编译成单个其他文件,因此我不想跟踪所有输出文件的名称以用作目标.