Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[Gnu make] Conserver les "*.ext" intermedaires

1 réponse
Avatar
Daniel Déchelotte
Bonjour,

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.

Daniel
--
http://yo.dan.free.fr/

1 réponse

Avatar
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/