Voici une version réduite de mon Makefile:dépendances Makefile ne fonctionnent pas pour cible phony
.PHONY: all
all: src/server.coffee
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
Je veux courir make
et ont seulement elle recompiler quand src/server.coffee
a changé. Cependant, il recompile chaque fois que je lance 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
Si je change Makefile de ne pas utiliser une cible bidon, il fonctionne comme prévu. Nouveau Makefile:
bin/server.js: src/server.coffee
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
Résultat:
$ make
mkdir -p bin
./node_modules/.bin/coffee -c -o bin src/server.coffee
$ make
make: `bin/server.js' is up to date.
Pourquoi viendriez pas respecter mes dépendances avec une cible bidon? La raison pour laquelle je demande est parce qu'en réalité, je ne vais pas simplement compiler un seul fichier dans un seul autre fichier, donc je ne veux pas avoir à suivre les noms de tous les fichiers de sortie à utiliser comme cibles.
Juste pour être clair, une ** cible vide ** doit être un fichier et est vraiment juste utilisée pour son horodatage? Existe-t-il un autre type de '.PHONY 'qui permet à une règle cible d'avoir un corps de recette (avec des commandes qui sont exécutées) * et * ne s'exécute que lorsque les dépendances ont besoin d'être mises à jour? Il semble assez cassé car il faut que '.PHONY' fasse des choses différentes selon qu'il a un corps de recette ou non. – jozxyqk