.PHONY toutes les règles dans GNU make file?

Ai-je tort dans mon interprétation que je devrais essentiellement simplement mettre d'abord avant de faire des règles:

.PHONY: all of my rules all: echo "Executing all ..." of: echo "Executing of ..." my: echo "Executing my ..." rules: echo "Executing rules ..." 

Y a-t-il un cas où vous ne voudriez pas suivre cette «formule»?

http://www.gnu.org/software/make/manual/make.html#Phony-Targets

Le guide de style Makefile de Clark Grubb recommand que:

  • Toutes les cibles fictives doivent être déclarées en les rendant préalables à .PHONY.
  • ajoutez chaque cible bidon comme condition préalable à .PHONY immédiatement avant la déclaration de la cible, plutôt que d'énumérer toutes les cibles bidons dans un seul endroit.
  • Aucune cible de file ne doit être un prérequirejs de .PHONY.
  • Les cibles fictives ne doivent pas être des conditions préalables aux objectives du file.

Pour votre exemple, cela signifierait:

 .PHONY: all all: echo "Executing all ..." .PHONY: of of: echo "Executing of ..." .PHONY: my my: echo "Executing my ..." .PHONY: rules rules: echo "Executing rules ..." 

Plusieurs cibles PHONY sont autorisées; voir aussi cette question Stack Overflow: "Est-il possible d'avoir plusieurs cibles .PHONY dans un makefile gnu?"

En outre, bien que cela ne soit pas mentionné directement dans votre question, il faut prendre soin de ne pas avoir une cible PHONY avec le même nom d'une input réelle ou des files intermédiaires dans votre projet. Par exemple, si votre projet avait hypothétiquement un file de code source nommé rules (sans suffixe), l'inclusion de cette string dans une cible PHONY pourrait briser le comportement de make attendu.

Je pense que c'est une bonne pratique à suivre mais en la fragmentant et en mettant les fragments même après que les règles complètes fonctionnent aussi sur mon gmake (3.81):

Par exemple:

 #Makefile all: @echo hello world .PHONY: all 

CMD:

 $ touch all $ make all #this would be a no-op if all weren't a phoney target hello world