OVH Cloud OVH Cloud

Makefile, variable et fichier

2 réponses
Avatar
david
Bonjour,

Dans un (gnu)Makefile, j'ai une grosse variable, mettons $(FILELIST) qui
contient un gros tas de noms de fichiers (résultat de $(shell find)), que je
transforme avec une règle de susbitution :

NEWFILELIST = $(FILELIST:%=ailleurs/%)

Et dans une autre règle, je veux mettre tout ça dans un fichier.

@echo "$(NEWFILELIST)" > fichier
@echo $(NEWFILELIST) > fichier
@/bin/echo "$(NEWFILELIST)" > fichier

Et quand ma liste devient trop grosse je me prend une erreur légitime :

make[1]: execvp: /bin/sh: Argument list too long

Et je ne sais pas comment m'en sortir :

J'ai besoin de la variable FILELIST pour vérifier les dépendances, et j'ai
besoin de son contenu dans un fichier pour le passer à java (je préprocesse
les sources avec cpp).

J'ai une solution qui est de faire une seconde fois le find, refaire ma
substitution en shell et rediriger dans le fichier. Mais bon, ça fait deux
find identiques.

Une autre solution serait de toujours faire le find vers un autre fichier, puis
mettre le contenu du fichier dans une variable, mais ça implique d'exécuter
une règle avant d'affecter une variable. Je sais pas faire.

Ou alors je me plante complètement.

J'ai pas trouvé de builtin-command de gnumake pour mettre le contenu d'une
variable dans un fichier.

Si qqun à une idée je suis preneur. En attendant je vais faire deux find...

david

2 réponses

Avatar
Paul Gaborit
À (at) 12 Apr 2006 19:09:20 GMT,
david écrivait (wrote):
Dans un (gnu)Makefile, j'ai une grosse variable, mettons $(FILELIST) qui
contient un gros tas de noms de fichiers (résultat de $(shell find)), que je
transforme avec une règle de susbitution :

NEWFILELIST = $(FILELIST:%=ailleurs/%)

Et dans une autre règle, je veux mettre tout ça dans un fichier.

@echo "$(NEWFILELIST)" > fichier
@echo $(NEWFILELIST) > fichier
@/bin/echo "$(NEWFILELIST)" > fichier

Et quand ma liste devient trop grosse je me prend une erreur légitime :

make[1]: execvp: /bin/sh: Argument list too long

Et je ne sais pas comment m'en sortir :


Peut-être en utilisant les cibles .PHONY :

.PHONY: fairefichier $(NEWFILELIST)

fairefichier: $(NEWFILELIST)

$(NEWFILELIST):
@echo $@ >> fichier

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>

Avatar
david
Paul Gaborit wrote:
Et je ne sais pas comment m'en sortir :


Peut-être en utilisant les cibles .PHONY :

.PHONY: fairefichier $(NEWFILELIST)

fairefichier: $(NEWFILELIST)

$(NEWFILELIST):
@echo $@ >> fichier


Effectivement!

Je vais creuser, merci :-)

david