12
votes

Comment forcer à faire fonctionner une cible propre si Makefile a changé

Si Makefile changements, faites reconstruire toutes les cibles à droite?

Mais comment dire faire que si après Makefile modifié, il doit exécuter créer clairement , puis faire ?

ou comment instruire faire de gérer une autre commande dans cette situation? Dois-je écrire un type spécial de cible?


2 commentaires

Utilisez-vous GNU FAIT UNIQUEMENT ou utilisez-vous un autre programme?


Ce n'est pas vrai que faire des reconstitutions après une modification du makefile - voir Stackoverflow.com/Questtions/3871444/...


3 Réponses :


4
votes

vous pourrait essayer ceci: xxx

Je ne suis pas un faire expert donc je ne sais pas si c'est une horrible hack, mais cela a fonctionné dans mes tests limités; -)


2 commentaires

Cela va se casser pour des constructions parallèles (avec -j ), car il peut exécuter créer un en même temps que celui-ci construit pour Yourmainttarget .


^ "Cela va se casser pour des constructions parallèles" correctes. Pour corriger, ajoutez une dépendance à Yourmainttarget comme: Yourmainttarget: Makefile.Uptodate . Ensuite également, ajoutez-la de la même manière à toutes les autres cibles, par ex. .O fichiers pour compiler le code C / C ++ ou quelque chose. Cela le forcera à résoudre les commandes sous la cible Makefile. / Code> avant de démarrer la version de Yourmainttarget ou de ses dépendances, ce qui permet de finir le nettoyage avant par ex. Compiler quelque chose ou courir n'importe quoi.



4
votes

brut mais efficace (je ne peux penser à rien de plus élégant): XXX


1 commentaires

Je ne pense pas que vous ayez besoin de $ (make) à la fin; Cela devrait être traité par l'entrée initiale du maquillage. Droit? Clever avec Inclure cependant!



2
votes

Je pense que vous voulez exécuter automatiquement, car vous voulez que certaines cibles soient reconstruites chaque fois que la marque est appelée. Cela peut être atteint en ajoutant une dépendance nommée Force code> à la règle dont vous souhaitez construire la cible, puis définissez Force code> comme ceci: c.-à-d. Aucune règle et aucune dépendance.

%.o : %.cpp FORCE
    $(CXX) -c $(CXXFLAGS) $< -o $@


0 commentaires