Une question c*n, mais c*n : comment conserver les fichiers avec une
extension donnee (disons : "ext") dont je n'ai pas demande explicitement
la construction, mais uniquement via une dependance ? J'ai ceci a la fin
de mon Makefile :
.PRECIOUS: %.ext
Pourquoi make continue-t-il de m'effacer "quelques" .ext apres avoir
construit la cible que je lui ai demandee ? Je dis "quelques" parce qu'il
conserve effectivement quelques fichiers .ext (qu'il efface si je ne mets
pas la cible PRECIOUS), mais certains se font tout de meme effacer.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Daniel Déchelotte
| C'est surement pas make qui va s'ammuser à supprimer des fichiers. | Tu dois avoir des commandes dans des règles qui font ça.
Non non, je t'assure. :) J'ai lance "make -db ma_cible" (debug info: basic) et les deux dernieres lignes sont Successfully remade target file 'ma_cible' rm <plein_de_fichiers_temporaires,_dont_quelques'uns_de_mes_fichiers_precieux>
J'en conclus qu'il s'agit bien d'un nettoyage post-succes, et non d'une prerequis ou d'une commande normale.
| Peut être une bonne chose quand on a des commandes qui génèrent | plusieurs fichiers à la foi, serait de les citer tous comme cible:
Oui, c'est sans doute la bonne piste. J'ai deux regles pour fabriquer les fichiers .ext :
base_et_%.ext: %.ext base.ext # Je voudrais tous les prerequis, mais separes par une virgule, pas par # un espace, donc $^ ne convient pas ! :( fusionne $<,base.ext -o $@
%.ext: %.ext.gz gunzip -c $< > $@
Et bien tous les base_et_*.ext sont effaces par le nettoyage, mais les *.ext qui ne "matchent" pas base_et_*.ext sont conserves...
Fort de ce constat, j'ai rajoute base_et_%.ext dans les prerequis de la cible .PRECIOUS, et mon probleme s'est resolu :
.PRECIOUS: %.ext base_et_%.ext
Question subsidiaire : un tel comportement est-il vraiment une "feature" ?
Merci pour l'aide, en tout cas. Daniel -- http://yo.dan.free.fr/
| C'est surement pas make qui va s'ammuser à supprimer des fichiers.
| Tu dois avoir des commandes dans des règles qui font ça.
Non non, je t'assure. :)
J'ai lance "make -db ma_cible" (debug info: basic) et les deux
dernieres lignes sont
Successfully remade target file 'ma_cible'
rm <plein_de_fichiers_temporaires,_dont_quelques'uns_de_mes_fichiers_precieux>
J'en conclus qu'il s'agit bien d'un nettoyage post-succes, et non d'une
prerequis ou d'une commande normale.
| Peut être une bonne chose quand on a des commandes qui génèrent
| plusieurs fichiers à la foi, serait de les citer tous comme cible:
Oui, c'est sans doute la bonne piste. J'ai deux regles pour fabriquer les
fichiers .ext :
base_et_%.ext: %.ext base.ext
# Je voudrais tous les prerequis, mais separes par une virgule, pas par
# un espace, donc $^ ne convient pas ! :(
fusionne $<,base.ext -o $@
%.ext: %.ext.gz
gunzip -c $< > $@
Et bien tous les base_et_*.ext sont effaces par le nettoyage, mais les
*.ext qui ne "matchent" pas base_et_*.ext sont conserves...
Fort de ce constat, j'ai rajoute base_et_%.ext dans les prerequis de la
cible .PRECIOUS, et mon probleme s'est resolu :
.PRECIOUS: %.ext base_et_%.ext
Question subsidiaire : un tel comportement est-il vraiment une "feature" ?
Merci pour l'aide, en tout cas.
Daniel
--
http://yo.dan.free.fr/
| C'est surement pas make qui va s'ammuser à supprimer des fichiers. | Tu dois avoir des commandes dans des règles qui font ça.
Non non, je t'assure. :) J'ai lance "make -db ma_cible" (debug info: basic) et les deux dernieres lignes sont Successfully remade target file 'ma_cible' rm <plein_de_fichiers_temporaires,_dont_quelques'uns_de_mes_fichiers_precieux>
J'en conclus qu'il s'agit bien d'un nettoyage post-succes, et non d'une prerequis ou d'une commande normale.
| Peut être une bonne chose quand on a des commandes qui génèrent | plusieurs fichiers à la foi, serait de les citer tous comme cible:
Oui, c'est sans doute la bonne piste. J'ai deux regles pour fabriquer les fichiers .ext :
base_et_%.ext: %.ext base.ext # Je voudrais tous les prerequis, mais separes par une virgule, pas par # un espace, donc $^ ne convient pas ! :( fusionne $<,base.ext -o $@
%.ext: %.ext.gz gunzip -c $< > $@
Et bien tous les base_et_*.ext sont effaces par le nettoyage, mais les *.ext qui ne "matchent" pas base_et_*.ext sont conserves...
Fort de ce constat, j'ai rajoute base_et_%.ext dans les prerequis de la cible .PRECIOUS, et mon probleme s'est resolu :
.PRECIOUS: %.ext base_et_%.ext
Question subsidiaire : un tel comportement est-il vraiment une "feature" ?
Merci pour l'aide, en tout cas. Daniel -- http://yo.dan.free.fr/