Introduction à Make

Posté par  . Modéré par Fabien Penso.
Étiquettes :
0
19
mai
2002
GNU
Cet article est une introduction à l'usage de l'outil make. Cet utilitaire écrit par Richard Stallman et Roland McGrath est associé à la plupart des développements (principalement C/C++). Par comparaison de date de création/mise à jour il évite de recompiler des sources inutilement. Mais son usage va bien au delà et vous pouvez vous en servir pour minimiser les commandes dans la plupart des projets. Ce document s'appuie sur des exemples triviaux pour Java, LATEX et bash.

Aller plus loin

  • # -Pour les modéros- Faute dans le titre!

    Posté par  . Évalué à -3.

    Introducation

    (-1 <- NE PAS VOTER)
  • # gnu make ?

    Posté par  (site web personnel) . Évalué à -10.

    Si c'est RMS qui a inventé les makefiles, je comprends mieux pourquoi la syntaxe est aussi tordue </troll facile>

    C'est vraiment lui l'auteur de make ? ou bien est-il l'auteur de GNU make ? et dans ce cas qui est l'auteur du tout premier make ?
    • [^] # man make:

      Posté par  (Mastodon) . Évalué à 10.

      The manual describes the GNU implementation of make, which was written by Richard Stallman and Roland McGrath.

      Il s'agit donc bien uniquement de l'implémentation GNU qui a été coécrite par RMS. C'est d'ailleurs probablement pour ça qu'il faut utiliser gmake sur des systèmes non GNU.
  • # Java + Make = Ant

    Posté par  . Évalué à 10.

    Petit rappel, pour Java il existe Ant qui remplace avantageusement les makefile, développé par le projet Jakarta et qui se configure par des scripts XML, aussi facile à lire que des makefiles et bien plus portable puisque Ant est 100% Java
    http://jakarta.apache.org/ant/(...)
    • [^] # Re: Java + Make = Ant

      Posté par  . Évalué à 10.

      On peut faire des regles de compilation conditionnelle ? ( sans modifier le makefile ... )

      genre si OS == toto faire titi ...
      • [^] # Re: Java + Make = Ant

        Posté par  . Évalué à -10.

        Bien sûr, ant est extrêmement puissant et moderne en même temps.

        N'empêche que tout ça me fait bien rire, un "ingénieur java/xml" qui nous pond en 2002 un tutorial sur make, on croit rêver. Son prochain article, ce sera une explication sur les listes chainées en C, ou alors un tutoriel sur la communication série en GFA-Basic ?

        C'est à se demander comment un tel article a pu être validé par un modérateur.
        • [^] # Re: Java + Make = Ant

          Posté par  . Évalué à 10.

          Je vois pas pourquoi un ingé "java/xml" ne pourrait pas se servir de make et de langage C si besoin est. L'intelligence, c'est aussi de savoir choisir les bonnes solutions en fonction des besoins. Ce n'est pas non plus incompatible avec connaitre des outils "plus anciens". C'est sur que XML et l'objet c'est ultra-aware, mais ça ne veut pas dire que le reste est has-been. Non un bon informaticien n'est pas un techno-gogo ... ce que tu sembles etre.

          Partager ses connaissances, je trouve ça très bien. Il y a toujours à apprendre, certains sont meme surement contents de trouver un tutoriel léger et clair comme celui-ci. Au lieu de critiquer, qu'as-tu fais TOI ?
        • [^] # Re: Java + Make = Ant

          Posté par  . Évalué à 10.

          Tiens, encore un type qui tient la solution à tout les problèmes de l'informatique.
          Tous en Java + XML + Swing + J2EE ! C'est évident que c'est la meilleure des solutions en toute circonstances, que ce soit en système embarqué, en serveur ou en workstation. make/C/Unix su>< ! C'est d'ailleurs incompréhensible qu'on utilise encore ces merdes au XXIème siècle !
          Tu n'es pas capable de réfléchir une seconde ? Tu voudrais compiler le noyau avec Ant ? Tu voudrais utiliser tes ports *BSD/Gentoo avec Ant ? Alors, réfléchis une seconde avant de chier sur make ! Ant est un très bon système, mais n'est pas la solution universelle. Alors, un tutorial sur make, c'est Bien (tm).

          Gros coup de gueule --> [-1]
          • [^] # Re: Java + Make = Ant

            Posté par  . Évalué à -10.

            Ton troll est lamentable, et ton coup de gueule tu le passes pour rien, parce que je ne suis absolument pas un adapte de Java/J2EE et compagnie, mais je suis encore suffisament lucide pour avoir été voir par moi-même ce que permettait ANT, ce qui n'est manifestement pas ton cas.

            Alors, oui, je le redis, et je le redirai encore, un ingé java/xml (et là, c'est marrant, tu la ramènes moins sur les buzzword, c'est pourtant pas moi qui les utilise) qui nous fait du make alors que ant est devenu un standard de fait, c'est ridicule. D'ailleurs, regarde ses exemples, il n'utilise make que pour compiler du java.

            C'est d'autant plus dommage que sur le site il y a d'autres articles fort intéressant. Le plus triste, c'est que le gars qui a posté la news n'ait retenu que le pire de tous. Et encore plus triste, que ça soit passé. Comme je l'ai dit, j'ai peur que la prochaine fois on nous explique sur linuxfr les pointeurs en BCPL ou les registres en asm68K.
            • [^] # Re: Java + Make = Ant

              Posté par  . Évalué à 8.

              J'ai dit qu'Ant était un bon soft. Je reconnais donc ces qualités (et je l'ai utilisé/je l'utilise), je ne vois donc pas ce que viens foutre ton "ce qui n'est manifestement pas ton cas".

              "ant est devenu un standard de fait" Où ça ? t'as des chiffres ? des gens pour confirmer ?

              "les pointeurs en BCPL ou les registres en asm68k" Ca n'a rien à voir et tu le sais très bien. Ant n'est pas en mesure de remplacer make dans tout les cas (même si, encore une fois, je reconnais ses qualités), et tu le sais très bien. Donc, un tutorial sur make est utile.

              Tout ce que j'essaie de dire, c'est que visiblement, l'unanimité sur le génie absolu de Ant ne semble pas être faite. Comme a dit JPz un peu plus haut, tu me paraît être assez "techno-gogo" dans le genre, et j'aimerais bien voir ta réfutation point par point des arguments de djefer qui sont plus bas.

              je persiste et je signe dans un troll --> [-1]
      • [^] # Re: Java + Make = Ant

        Posté par  . Évalué à 7.

        On peut creer des cibles qui se déclenchent seulement si un variable est définie ou pas:
        <target name="macible" if="mavariable">

        Mais c'est un peu limité je te l'accorde. Ou alors il te faut ecrire ta propre tache en étendant Ant. Ce n'est pas très compliqué.

        Ce n'est pas un fonctionnalité manquante, c'est une philosophie, parfois gênante mais bon de toute façon ce ne sera pas changé dans Ant 2
        http://jakarta.apache.org/ant/ant2/requested-features.html(...)

        Rejected: Simple flow-control (if-then-else, for)
    • [^] # Re: Java + Make = Ant

      Posté par  (site web personnel) . Évalué à 10.

      Ant est sous licence Apache 1.1, qui est incompatible avec la GPL (suivant la FSF) et compatible suivant l'Apache Software Foundation.
      (clause de publicité, restrictions sur les mots Apache et ASF)

      http://www.gnu.org/licenses/license-list.html(...)
      http://www.apache.org/foundation/licence-FAQ.html#GPL(...)
      et lire aussi les liens fournis par Google
      http://www.google.com/search?q=GPL+Apache+license+incompatible&(...)
      (apparemment il y a eu de longues discussions sur le sujet, mais rien de clair n'en est sorti)

      Donc si vous utilisez seulement Ant pour déployer votre appli, pas de problème. Si vous écrivez vos propres classes pour étendre Ant, vous ne pouvez pas les mettre sous GPL.

      Bon je suis un peu hors-sujet là, mais avec l'équipe d'un projet Java GPL on vient de se prendre la tête pour virer des modules sous AL 1.1 (Xerces et Log4J) et les remplacer par des modules LGPL (Piccolo et LumberJack).
      • [^] # Re: Java + Make = Ant

        Posté par  . Évalué à 0.

        L'incompatibilité est quelque peu stupide, surtout que la FSF n'a pas vraiment de réponse satisfaisante à son refus de compatibilité. Un peu comme la licence Artistic originale (pas celle qu'ils ont révisée et acceptée) où ils se contentent de dire qu'il y a des points flous : lesquels ?

        La licence Apache n'est pas copyleft, mais parfaitement libre. Les clauses de pubs ne sont pas un motif valable. Après tout il est souhaitable de mentionner le code de tierces personnes que l'on utilise. Il me semble que c'est un minimum de respect envers le travail des autres. La licence Apache est la seule des licences type BSD, X11 et consort (donc très permissives) qui impose une telle clause. Je ne vois pas ce qu'il y a de mal là dedans ...

        Perso j'ai un module d'un projet qui est une tache Ant, c'est sous GPL et point final.
        • [^] # Re: Java + Make = Ant

          Posté par  (site web personnel) . Évalué à 10.

          La FSF ne dit pas que la AL n'est pas libre, elle dit juste que la AL n'est pas compatible avec la GPL. Après avoir lu les deux licences, je suis plutôt d'accord avec la FSF. Les clauses de pub sont contraires légalement à la GPL, même si pour notre projet nous ne les enfrenions pas. Le problème est légal, plus qu'éthique (même si c'est l'éthique/la politique de la FSF qui fait que la GPL contient ce qu'elle contient).

          J'ai écrit à la FSF car je trouve idiot d'avoir deux sites majeurs/deux communautés majeures du libre en désaccord, incapables de se mettre d'accord. Il serait bien qu'une position claire se dégage : incompatibilité ou compatibilité, et éventuellement une nouvelle licence d'un côté ou de l'autre pour régler le problème si problème.

          (pour notre projet, une exception ajoutée à la GPL autorisant l'utilisation de modules sous AL était impossible car nous utilisons aussi JSX (GPL) dont nous ne sommes pas les détenteurs du copyright)
          • [^] # Re: Java + Make = Ant

            Posté par  . Évalué à 3.

            Je suis très clairement d'accord avec toi sur le fait de l'idiotie fondamentale de l'incompatibilité. En meme temps je ne vois pas en quoi la clause de pub entraine l'incompatibilité. Ce n'est pas une restriction qui entraine de vice. Elle entraine juste un respect du travail des autres mais n'introduit pas d'effet permettant un détournement quelconque. Pas plus que cela s'oppose aux principes de la GPL ...

            Au vu de la qualité des outils de la Apache Foundation, c'est très dommage ce style de discorde car beaucoup de projets ont a bénéficier de cette qualité :-/
    • [^] # Re: Java + Make = Ant

      Posté par  . Évalué à 6.

      Un autre avantage de Ant par rapport à Make pour les projets Java: c'est la rapidité:
      - Dans un Makefile, si on fait 2 fois javac, le compilo java est chargé/déchargé de la mémoire 2 fois
      - Dans un build.xml (Ant), si on fait 2 fois javac le compilateur n'est pas chargé plusieurs fois car il utilise la même machine virtuelle que Ant (à moins de lui imposer le contraire)
      Donc gain de temps. Cela est aussi vrai pour tous les outils qui sont écris en java: rmic, ejbc, idl2java... Une seule JVM pour tous, tous pour une même JVM!

      Par contre, j'ai l'impression que Ant est moins efficace pour détecter ce qui a changé de ce qui n'a pas bougé et fait parfois des trucs inutiles. Mais ce n'est qu'une impression, ou alors que mon build.xml n'est pas parfait.
    • [^] # Re: Java + Make = Ant

      Posté par  . Évalué à 3.

      Voici une fiche qui décrit un peu prés le
      potentiel de Ant.

      http://www.djefer.com/articles/fiches/FT_SYS_ANT_01.html(...)

      Personnellement, Ant est bien lorsque l'on a
      rien d'autre sous la main. Mais il n'est pas
      comparable avec Make pour la simple raison
      que Make comprend son propre langage indépendant
      et un interfaçage transparent avec le shell courant (et pas ces fichus tags).
      Pour Windows, l'idéal reste cygwin. De toute
      manière faire du code portable est souvent plus
      une question de programmation de shell qu'une
      question de Makefile.

      Concernant Ant, il est fait en Java, il est
      exacte qu'une compilation globale sera
      plus rapide, mais cela masque la réalité du
      développement. Je ne recompile 99% du temps
      qu'un sous-répertoire lorsque je viens de
      modifier un truc et là Make est vraiment
      l'idéal. Je me vois mal mettre sur tous les
      répertoires un fichier build.xml. D'autant
      plus que le démarrage Java est lui bien plus
      lent !.

      Make s'intègre parfaitement à Emacs, un petit
      C-c c et je compile la classe modifiée, les
      lignes d'erreurs me sont retournés et je
      peux bosser le plus naturellement.

      Pour moi, Ant est plus intéressant en étape
      final d'un projet lorsqu'on souhaite tout
      packager (.war ou .ear) mais il est loin
      d'être incontournable. Il faut s'amuser
      à développer une extension pour voir ce
      qu'il y a derrière.
      • [^] # Re: Java + Make = Ant

        Posté par  . Évalué à -10.

        Ecoute, sans vouloir être méchant, tu n'as manifestement jamais utilisé ANT, alors plutôt que de raconter n'importe quoi, va lire la doc, va l'essayer, et tu comprendras pourquoi make n'a aucune espèce d'utilité pour compiler du java.

        Tous tes arguments sont fumeux, je pourrais te les démonter un par un, mais ça ne remplacerait pas une lecture de doc.
        • [^] # Re: Java + Make = Ant

          Posté par  . Évalué à 9.

          Je l'ai utilisé chez France Telecom il y a
          un an puis chez Axa il y a un peu moins de temps.

          La phrase "make n'a aucune espèce
          d'utilité pour compiler du java" est aussi idiote
          que de prétendre que "ant ne sert à rien" ou
          que tel ou tel outil ne doit pas être utilisé.

          Je pense que c'est à chacun de choisir et pour
          choisir il faut au moins connaître le "terrain".

          Il y a souvent cette tendance à vouloir toujours
          se tourner vers le "plus facile", tendance que
          je rencontre à tous les niveaux et qui forment
          des gens qui ne savent même pas au final faire
          un chercher/remplacer par un script.
  • # Commentaire supprimé

    Posté par  . Évalué à 10.

    Ce commentaire a été supprimé par l’équipe de modération.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.