Supposons doc.pdf est la cible.
La règle suivante déclenche une régénération de doc.pdf chaque fois que doc.refer est mis à jour, mais est également heureux lorsque doc.refer n'existe pas du tout :
doc.pdf: doc.mom $(wildcard doc.refer)
pdfmom -e -k < $< > [email protected]
Cependant, la règle de modèle suivante n'accomplit pas la même chose (le PDF est généré correctement, mais une reconstruction n'est pas déclenchée lors de la modification de doc.refer ):
%.pdf: %.mom Makefile $(wildcard %.refer)
pdfmom -e -k < $< > [email protected]
Je soupçonne que le wildcard la commande est exécutée avant le % le personnage est développé. Comment puis-je contourner ce problème ?
Réponse acceptée :
La fonction GNU Make wildcard prend un modèle global de shell et l'étend aux fichiers correspondant à ce modèle. Le modèle %.refer ne contient aucun modèle de globalisation du shell.
Vous voulez probablement quelque chose comme
%.pdf: %.mom %.refer
pdfmom -e -k < $< > [email protected]
%.pdf: %.mom
pdfmom -e -k < $< > [email protected]
La première cible sera invoquée pour créer des fichiers PDF lorsqu'il y a un .mom et un .refer fichier disponible pour le nom de base du document. La deuxième cible sera invoquée lorsqu'il n'y a pas de .refer fichier disponible.
L'ordre de ces cibles est important.