Hello !
Voilà, j'ai un script php qui me génère une chiée (non, ce n'est pas vulgaire) de fichiers tex. Je veux transformer ces fichiers en fichiers pdf. Jusque là, tout va bien, mais je voudrais faire ça automatiquement avec un makefile.
J'ai donc écrit un makefile minimum qui a cette structure :
all: tex pdf
tex:
./genFichiersTex.php
pdf:
texi2pdf --pdf -c -q a.tex
texi2pdf --pdf -c -q b.tex
texi2pdf --pdf -c -q c.tex
texi2pdf --pdf -c -q d.tex
Ce qui est chiant, c'est que si mon script php me génère un fichier e.tex, il faut que je modifie mon Makefile, sinon je n'aurais pas de fichier pdf résultant.
L'un d'entre vous saurait-il comment modifier mon Makefile définitivement pour que ça fonctionne une bonne fois pour toutes, quel que soit le nombre de fichiers .tex présents dans le répertoire courant ?
J'ai regardé la page de man et les pages d'info de make, mais pour l'instant, je n'ai pas trouvé comment procéder.
Merci par avance de m'aider dans ce grand moment de détresse !
# Makefile pas très adapté...
Posté par Christophe Discours (site web personnel) . Évalué à 3.
all: tex pdf
tex:
./genFichiersTex.php
pdf:
for i in *.tex; \
do; \
texi2pdf --pdf -c -q $i; \
done
[^] # Re: Makefile pas très adapté...
Posté par Gyro Gearllose . Évalué à 3.
J'ai essayé la solution que tu proposes ce matin, mais elle ne fonctionnait pas. Problème d'intentation ou de ; manquant probablement.
On m'a proposé également une solution à base de find qui me plait également.
Ce que j'aimerai comprendre, c'est pourquoi tu penses qu'un makefile n'est pas l'outil adapté à mon besoin.
Je n'allais pas raconter ma vie, mais puisqu'on m'y pousse (et puis après tout, si ça peut me faire gagner du temps par la suite...).
Allons-y donc.
Dans mon travail, il est fréquent que je rédige des scripts php qui interrogent des bases de données postgres pour me produire pleins de fichiers tex.
Les fichiers sont créés depuis le script php. Je n'ai pas le choix, car bien souvent, c'est un fichier tex par établissement, par exemple. J'en récupère le nom dans la base, c'est pratique.
Le but de la manoeuvre, c'est d'avoir un makefile générique qui dispose d'une règle pour appeler ce script php, une règle qui me génère des pdf, une autre qui me génère des ps, une autre des dvi, etc. Puis une qui fait un peu le ménage, et une autre qui fait le grand ménage, etc.
Donc, je pensais que dans ce cas, make était mon ami, mais je l'utilise tellement souvent.... Et puis surtout, je connais tellement la doc et toutes les options...
Bref, c'est pourquoi je pensais que c'était vraiment l'outil dont j'avais besoin.
Systématiquement, je nomme mes scripts php de la même façon, mes classes tex également, etc. Comme ça, je ne recopie que la portion congrue et nécessaire d'un répertoire de travail à un autre.
Voilà. Je reste ouvert à toute proposition.
[^] # Re: Makefile pas très adapté...
Posté par schyzomarijks . Évalué à 3.
fic=$(patsubst %.tex,%.pdf,$(wildcard *.tex))
all: $(fic)
$(fic) : %.pdf : %.tex
texi2pdf --pdf -c -q $<
Trouver grace à http://www.ensta.fr/~diam/dev/online/make/introMake-AlexBria(...)
[^] # Re: Makefile pas très adapté...
Posté par Gyro Gearllose . Évalué à 3.
C'est passablement génial. J'étais justement en train de lire le même article, mais tu as été plus vite que moi pour la trouver....
C'est tip-top !
[^] # Re: Makefile pas très adapté...
Posté par Christophe Discours (site web personnel) . Évalué à 1.
Si ton but c'est d'ajouter des opérations "quelconques" dans un Makefile, il est quand même intéressant de savoir mettre du shell dans un Makefile. Dans mon exemple j'avais mis des espaces pour montrer les tabs, mais ils ont été mangés à l'envoi... Ce qui est important de comprendre c'est que chaque ligne sous une régle va forker un shell. Donc pour écrire du shell il faut soit le mettre sur une seule ligne (avec force ';') soit sur plusieurs lignes mais en mettant des '\' devant les retour de lignes pour faire croire au Makefile que c'est la même ligne (et donc toujours mettre des ';'...).
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.