Le fichier Makefile Faire de dépendance uniquement si le fichier n'existe pas
Comme le dit le titre, je voudrais faire un dépendance uniquement si un fichier n'existe pas, PAS tout le temps de la mise à jour.
J'ai un répertoire racine (celui avec le makefile) et dans un sous-répertoire appelé "exemple". Dans mon répertoire racine sont quatre .h (fichiers de fonctions.h, analyseur.h, nœud.h, et d'exception.h) que je voudrais copier à l'exemple de" sous-répertoire si celles-ci .h les fichiers n'existent pas déjà dans la liste des "exemples".
Malheureusement je ne peux pas juste faire un standard de dépendance afin de vérifier les fichiers d'en-tête de la section "exemple", car chaque fois que je copie les fichiers d'en-tête de la racine à la "exemple", les fichiers d'en-tête de la section "exemple" sera considéré comme mis à jour et ne déclencher que la dépendance à chaque fois que je lance make. Je voudrais un moyen d'avoir mon makefile copier les fichiers d'en-tête à partir du répertoire racine pour "exemple" uniquement si elles n'existent pas en "exemple".
$@
) sont valides dans la recette. Vous ne pouvez pas les utiliser dans les objectifs, pré-requis, ou à faire des déclarations conditionnelles (parce que ceux qui sont développés tandis que le makefile est lu). Dans ces cas, $@
étend à la chaîne vide.Je vois, mais parce que je les ajoute "exemple/" il y a quelque chose de l'ifeq() pour toujours la valeur false. Merci pour éclaircir cela. J'ai édité mon post pour se concentrer sur le reste de la question.
OriginalL'auteur Daniel | 2014-02-13
Vous devez vous connecter pour publier un commentaire.
C'est ce que commande-seuls prérequis/dépendances:
Dans votre cas:
Voir aussi: Commande-seuls prérequis n'apparaissent pas dans
$^
ou$+
.Je ne suis pas sûr pourquoi aurait-on utiliser un autre.
Vous avez raison avec votre edition )
Dans le passé, j'ai été coincé avec d'autres
make
s mais en effet, c'était il y a longtemps.Merci, cet exemple fonctionne, mais je ne suis pas sûr que je comprends. J'ai pensé ordre signifie seulement que si la dépendance "%.h" n'existe pas ou est mis à jour, il ne serait PAS déclencher la cible "exemples/%.h". En outre, "exemples/%.h" est une dépendance de son propre qui doit être déclenché à tout moment des fichiers à partir de "root" sont copiés sur des "exemples", car il met à jour les fichiers "exemples/%.h". Ce n'est cependant pas le comportement de sens, il fait ce que je veux, mais pas ce que j'attends. Pourriez-vous élaborer sur ce qui se passe dans votre solution?
OriginalL'auteur Maxim Egorushkin
Vous devez exprimer les dépendances en termes de fichiers relatifs à l'âge.
Couramment utilisée pour la solution de contournement consiste à utiliser un mannequin ("sentinelle") fichier que les drapeaux de l'opération d'achèvement:
et de faire ce que la règle dépend
example/foo.h
dépendent aussi deexample/foo.h.hasbeencopied
.OriginalL'auteur reinierpost