Oto zmniejszona wersja mojego Makefile:Makefile zależności nie działają na fałszywych cel
.PHONY: all
all: src/server.coffee
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
chcę uruchomić make
i tylko to przekompilować gdy src/server.coffee
uległ zmianie. Jednak za każdym razem, to recompiles biegnę 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
Jeśli zmienię mojego Makefile nie używać fałszywych cel, to działa zgodnie z oczekiwaniami. Nowy Makefile:
bin/server.js: src/server.coffee
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
Wynik:
$ make
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
$ make
make: `bin/server.js' is up to date.
Dlaczego nie będzie respektować moje współzależności z fałszywych cel? Powodem, dla którego pytam, jest fakt, że w rzeczywistości nie będę tylko kompilował jednego pliku w jednym pliku, więc nie chcę śledzić nazw wszystkich plików wyjściowych, które będą używane jako cele.
Po prostu, aby być czystym, ** pusty cel ** musi być plikiem i jest naprawdę używany tylko dla jego znacznika czasu? Czy istnieje inny rodzaj '.PHONY', który pozwala, aby reguła docelowa miała treść receptury (z wykonanymi poleceniami) * i * działają tylko wtedy, gdy zależności wymagają aktualizacji? Wygląda na to, że '.PHONY' robi różne rzeczy, w zależności od tego, czy ma ciało receptury, czy nie. – jozxyqk