2008-10-20 6 views
11

J'essaie d'apprendre GNUMake pour un petit projet sur lequel je travaille. Jusqu'à présent, même les tutoriels "de base" semblent assez approximatifs et je n'ai pas encore compris la syntaxe de makefile.Ressources pour apprendre GNUMake?

Quelqu'un at-il de bonnes ressources pour un débutant absolu pour se familiariser avec GNUMake?

Répondre

12

Le guide définitif est http://www.gnu.org/software/make/manual/make.html
Il existe un livre o'reilly «Gestion des projets avec GNU Make» qui contient plus d'explications. Vous pouvez également utiliser les éditions précédentes, elles ne couvrent pas spécifiquement GnuMake mais sont beaucoup plus minces. Make est un sale secret parmi les développeurs - aucun d'entre nous ne le comprend, nous empruntons simplement un script make à quelqu'un d'autre et le modifions. J'imagine qu'un seul script a été écrit de toutes pièces (probablement par le créateur de l'outil). Lorsque vous avez besoin de faire plus que l'exemple simple, la plupart des gens basculent vers un système de construction plus moderne comme Ant ou roulent le leur en Perl/Python/etc.

+0

J'avais entendu dire qu'un arbre généalogique pour makefiles serait plutôt incestueux. : D –

+0

Je n'ai jamais troupeau de quelqu'un "roulant" leur propre Perl/Python/ect. système pour des scénarios de construction complexes ou «plus que simples». En fait construire des outils comme SCon de Python tombe sur son visage avec une base de code complexe très grande. Mais je suis d'accord que vous pouvez probablement vous débrouiller en «empruntant» les scripts d'autres personnes. – Tom

+0

@Tom - pas tellement pour la partie make de ce qui a changé/doit être reconstruit, mais plus pour les outils supplémentaires pour configurer les DB, générer des numéros de série et graver des CD –

0

mgb: C'est encore pire que ça. J'ai déjà écrit un système de création compliqué à partir de zéro (quelques milliers de fichiers, cinquante ou cent répertoires, quatre ou cinq compilateurs et cibles de compilation croisée, deux systèmes d'exploitation, etc.). Je me suis assis et j'ai appris le gnou à l'intérieur et à l'extérieur, j'ai conçu le système, joué d'abord avec un prototype. Nous étions tous très heureux du résultat.

Mais c'était il y a des années. Tu sais comment je les écris aujourd'hui? De la même manière que vous décrivez. C'est assez juste et les détails de la syntaxe sont assez obscurs que si vous le faites assez régulièrement, vous ne pouvez pas vous souvenir des détails. Comme n'importe quelle autre langue avec une syntaxe non intuitive et des règles bizarres, je suppose.

+0

Nous avons abandonné et écrit notre propre systme simple en Python, il a dû construire sur windows/linux/sparc et était plus facile que d'essayer de comprendre make. –

+0

Je pensais ça, mais faire n'était pas si mal une fois que j'ai eu la tête autour d'elle. C'était pre python et ruby; Je suppose que j'aurais pu utiliser tôt Perl, peut-être. – simon

3

Les fonctionnalités les plus utilisées de make peuvent être décomposées en quelques concepts, cibles, dépendances et variables simples.

Les cibles sont les éléments que vous voulez construire, mais les commandes sous une cible peuvent être des commandes ou des scripts de compilation. Généralement, chaque cible fait référence à un module dans votre code, mais vous pouvez les rendre aussi précis que vous le souhaitez.

Les dépendances sont des fichiers ou d'autres cibles de votre projet. Le meilleur exemple de ceci est pour un projet C où vous construisez un binaire à partir d'un tas de fichiers objets. Chaque fichier objet devra exister avant que vous puissiez construire le binaire, donc faire traversera vos cibles jusqu'à ce que toutes les dépendances aient été complétées, puis exécuter la commande pour la cible globale.

Les variables ne sont pas toujours nécessaires, mais sont très utiles pour gérer des choses comme les drapeaux de compilation. Les exemples canoniques sont CC et CCFLAG qui se référeront au compilateur en utilisant gcc et les indicateurs comme -ansi -Wall -o2.

Quelques trucs et astuces plus généraux:

  • Commandes doit être procédé par un caractère [tab], ou ils ne seront pas exécutées, c'est juste une vieille relique de faire, je ne Je ne me souviens pas pourquoi cela est.
  • Par convention, vous souhaiterez peut-être inclure une cible globale pour spécifier la cible par défaut qui doit être la valeur par défaut. Ceci est utile lorsque vous avez un makefile complexe et qu'il y a une cible particulière que vous voulez toujours être la valeur par défaut.
  • Votre makefile doit être appelé makefile ou Makefile, mais si vous voulez l'appeler quelque chose d'autre, utilisez make -f [makefilename]
  • $ Toujours utiliser la syntaxe complète de l'extension de variable ie $ (variable) ou faire ne peut émettre les commandes que vous voulez.
  • make peut fonctionner récursivement, donc si vous avez un tas de sous-modules dans votre projet qui vivent à l'intérieur des répertoires, vous pouvez appeler make sur le sous-répertoire makefile depuis make pour construire chacun. Si vous avez un projet très compliqué qui nécessite des scripts d'installation, etc., vous aurez probablement aussi besoin d'explorer autotools qui génère le makefile pour vous et fait un tas de trucs pour vérifier l'existence de la bibliothèque et d'autres problèmes de portabilité.
+0

Tout tutoriel-like pour accompagner cela? Je comprends les concepts généraux de GNUMake, mais la syntaxe makefile est un peu mystérieuse. –

+0

Je suis désolé Dana mais plusieurs des déclarations de la liste ci-dessus sont fausses. Par exemple, makefile et makefile sont acceptables, et make ne cherche pas la cible "all". Habituellement "tout" est placé en haut du fichier, c'est tout. De plus, les commandes doivent être précédées d'une tabulation, pas de caractère. –

+0

Noté, le désinfectant html de Jeff a mangé mon commentaire de l'onglet. Je vais ajouter ces corrections –

2

Je suis d'accord avec la suggestion de livre O'Reilly.

Pour quelques conseils utiles, des astuces et des idées dans le regard Faire Mr. Make articles

0

Je ne suis pas grand fan de système GNU info, mais j'ai trouvé GNU make pages d'information très utile. Une fois que vous connaissez les concepts de base et à peu près quel genre de choses sont disponibles, j'ai trouvé que les pages d'informations sont le moyen le plus rapide de référencer des informations comme des fonctions prédéfinies, par exemple.

(Oubliez le programme GNU info, et utiliser par exemple pinfo à la place.)

2

« Gestion de projets avec GNU Make, 3e édition » est mis sous « Licence de documentation libre GNU » et peut être lu légalement en ligne gratuitement: link.

Questions connexes