Question

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

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

Était-ce utile?

La solution

Le guide définitif est http://www.gnu.org/software/ make / manual / make.html
Il existe un livre o'reilly "Gestion de projets avec GNU Make". qui a plus d'explication. 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 pour les développeurs. Aucun de 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 à partir de rien (probablement par le créateur de l'outil).

Lorsque vous avez besoin de faire plus que du simple exemple, la plupart des gens optent pour un système de construction plus moderne comme Ant ou se lancent dans Perl / Python / etc.

Autres conseils

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

Les cibles sont les éléments que vous souhaitez créer, mais les commandes situées sous une cible peuvent être des commandes ou des scripts du compilateur. Généralement, chaque cible fait référence à un module dans votre code, mais vous pouvez les rendre aussi granulaires que vous le souhaitez, en fonction de votre projet.

Les dépendances sont des fichiers ou d’autres cibles dans votre projet. Le meilleur exemple en est pour un projet C dans lequel vous construisez un fichier binaire à partir de plusieurs fichiers objets. Chaque fichier objet doit exister avant que vous puissiez construire le fichier binaire. Ainsi, make traversera vos cibles jusqu'à ce que toutes les dépendances soient terminées, puis exécutera la commande pour la cible globale.

Les variables ne sont pas toujours nécessaires, mais sont assez pratiques pour gérer des tâches telles que les indicateurs de compilation. Les exemples canoniques sont CC et CCFLAGs, qui feront référence au compilateur que vous utilisez, à savoir gcc, et aux indicateurs tels que -ansi -Wall -o2.

Quelques trucs et astuces plus généraux:

  • Les commandes doivent être précédées d'un caractère [tab], sinon elles ne seront pas exécutées. Il s'agit simplement d'une ancienne relique de make. Je ne me souviens pas pourquoi.
  • Par convention, vous pouvez inclure une cible all pour spécifier la cible par défaut. Ceci est utile quand vous avez un makefile complexe et que vous voulez toujours être la cible par défaut.
  • Votre makefile devrait s'appeler makefile ou Makefile, mais si vous voulez l'appeler autrement, utilisez $ make -f [nomfichier]]
  • Utilisez toujours la syntaxe d'expansion de variable complète, c'est-à-dire $ (VARIABLE) ou make risque de ne pas générer les commandes souhaitées.
  • make peut fonctionner de manière récursive, donc si vous avez plusieurs sous-modules dans votre projet qui résident dans des répertoires, vous pouvez appeler make dans le makefile du sous-répertoire à partir de make pour les construire.
  • Si vous avez un projet vraiment compliqué qui nécessite des scripts d'installation, etc., vous voudrez probablement également rechercher autotools qui génère le fichier makefile et effectue de nombreuses astuces pour vérifier l'existence d'une bibliothèque et d'autres problèmes de portabilité.

"Gestion de projets avec GNU Make, 3ème édition" est placé sous " Licence de documentation libre GNU " et peut être lu légalement en ligne gratuitement: lien . / p>

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

Pour obtenir des conseils, des astuces et des conseils utiles concernant Make, consultez le Mr . Faire des articles

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

Mais c'était il y a des années. Tu sais comment je les écris aujourd'hui? De la même façon, tu décris. C'est juste assez fastidieux et les détails de la syntaxe sont assez obscurs à moins que si vous le faites assez régulièrement, vous ne vous en souvenez plus. Comme n'importe quel autre langage avec une syntaxe non intuitive et des règles bizarres, je suppose.

Je ne suis pas un grand fan du système d’information GNU, mais j’ai trouvé que les pages d’information GNU make étaient très utiles. Une fois que vous avez compris les concepts de base et le type d’objets disponibles, j’ai constaté que les pages d’information constituaient le moyen le plus rapide de faire référence à des informations telles que des fonctions prédéfinies, par exemple.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top