これが私の 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 を変更すると、期待どおりに動作します。新しいメイクファイル:
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.
偽のターゲットとの依存関係を尊重しないのはなぜですか? 私が尋ねる理由は、実際には、1 つのファイルを別の 1 つのファイルにコンパイルするだけではなく、ターゲットとして使用するすべての出力ファイルの名前を追跡する必要がないためです。