|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : avril 2012 Messages : 2 ![]() |
Bonjour,
Quand j'exécute mon Makefile celui ci efface des fichiers intermédiaires et je ne comprend pas pourquoi. Voici un exemple simplifié de ce que je veux faire: Code :
dans un répertoire contenant un fichier toto.c j'obtient: Code :
Si je relance la commande make all, j'obtient "nothing to do for all" alors que le répertoire ne contient pas de toto.b! Si vous pouviez m'éclairer sur ce point je pourrai enfin arrêter de m'arracher les cheveux Merci |
||||
|
|
00
|
|
|
#2 |
![]() ![]() Chercheur d'emploi Inscription : septembre 2007 Messages : 4 614 ![]() |
Hello,
Tu obtiens « nothing to do… » car tu as toujours « toto.a », qui est la seule dépendance officielle de « all ». Pour le reste, tu peux lire ce chapitre sur les chaînes de règles implicites : http://www.gnu.org/software/make/man...#Chained-Rules En l'occurrence, le fichier *.b est nécessaire pour relier *.a à *.c, mais n'est spécifié explicitement nulle part dans le Makefile. Puisque c'est make qui a pris l'initiative de le générer pour produire ce que tu lui as demandé, il est normal qu'il nettoie en fin de processus. Sauf si tu lui passes une directive pour lui demander de ne pas le faire. Voir aussi : http://gl.developpez.com/tutoriel/outil/makefile/ |
|
|
10
|
|
|
#3 |
|
Invité de passage
![]() Inscription : avril 2012 Messages : 2 ![]() |
Bonjour,
Merci Obsidian pour ta réponse et pour le lien vers la partie de la doc Gnu make qui parle des chaînes de règles implicites. Je pensais que même si toto.a est la seul dépendance officielle de all, make doit regarder si toto.a n'est pas la cible d'une autre règle (ici %.a: %.b). Ce comportement est effectivement dû aux chaînes de règles implicites (si on remplace les % par toto tout se déroule comme je m'y attend). On en parle ici avec quelques propositions pour éviter cette suppression automatique. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com