Вот приведенная версия моего 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.
Почему он не будет уважать мои зависимости с фальшивой целью? Причина, о которой я прошу, заключается в том, что на самом деле я не буду просто компилировать один файл в один другой файл, поэтому я не хочу отслеживать имена всех выходных файлов, которые будут использоваться в качестве целей.