Forum Programmation.autre Problème de makefile

Posté par  .
Étiquettes : aucune
0
3
nov.
2005

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  (site web personnel) . Évalué à 3.

    Le probléme c'est que le makefile n'est pas l'outil adapté à ce que tu veux faire. Il vaut mieux le faire en shell. Un mix des deux pourrait te donner quelque chose comme :

    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  . Évalué à 3.

      Déjà, j'y tiens, merci pour ton aide.
      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  . Évalué à 3.

        J'ai ta solution :)


        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  . Évalué à 3.

          Merci tout plein !
          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  (site web personnel) . Évalué à 1.

            La version avec la régle sur les suffixes est la plus élégante, mais elle risque de ne pas être portable sur toutes les versions de make.

            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.