Comprendre la commande Unix et Linux: make

L'utilitaire make détermine automatiquement quelles parties d'un programme volumineux doivent être recompilées et lance les commandes pour les recompiler. Le manuel décrit l'implémentation GNU de make, qui a été écrite par Richard Stallman et Roland McGrath.

L'utilitaire make n'est pas limité aux programmes. Vous pouvez l'utiliser pour décrire n'importe quelle tâche où certains fichiers doivent être mis à jour automatiquement à partir d'autres chaque fois que les autres changent. La commande make est le plus souvent utilisée dans un processus courant pour créer un logiciel à partir de son code source.

homme utilisant un ordinateur portable
lina aidukaite/Moment/Getty Images

Comment utiliser la commande Make sous Linux

Il s'agit d'un exemple courant d'utilisation de la commande make sur Linux. Habituellement, cela fait partie d'un processus simple en trois étapes pour créer des applications open source à partir de leur code source.

Ces exemples montrent programmes C car ce sont les plus courants, mais vous pouvez utiliser make avec n'importe quel langage de programmation pouvant exécuter son compilateur avec une commande shell.

  1. Installez Git, si vous ne l'avez pas, ainsi que les outils de création de logiciels.

    apt installer git build-essential
  2. Choisissez une application avec laquelle travailler ou téléchargez VLC.

    apt build-dep vlc
  3. Clonez le code source de VLC.

    cloner git https://github.com/videolan/vlc.git
  4. Modifiez les répertoires vers le code source VLC cloné et exécutez le script de configuration.

    cd vlc
    ./amorcer
    ./configurer
  5. Exécutez le Fabriquer commande avec le -j flag, suivi du nombre de cœurs/threads CPU de votre système.

    faire -j4
  6. Cela prendra un certain temps. Quand c'est fait, installez l'application avec faire installer.

    sudo faire installer
  7. Vous avez terminé.

Le plus souvent, c'est ainsi que vous verrez la commande make utilisée. Il peut y avoir des procédures plus complexes que cela ou de légères variations, mais ce n'est jamais trop complexe.

Comment fonctionne la commande GNU Make?

La section ci-dessous est une description technique de la commande make. Si vous cherchez à tirer le meilleur parti de make, reportez-vous aux options ci-dessous.

Cette page est un extrait de la documentation de GNU make. Il n'est mis à jour qu'occasionnellement car le projet GNU n'utilise pas nroff. Pour une documentation complète et actuelle, reportez-vous au fichier d'informations faire.info qui est fait à partir du fichier source Texinfo make.texinfo.

Syntaxe et préparation de l'utilitaire make

La syntaxe de l'utilitaire make est Fabriquer -Fmakefile ] [ option ]... cible...

Pour préparer l'utilisation de make, vous devez écrire un fichier appelé le makefile qui décrit les relations entre les fichiers de votre programme et indique les commandes de mise à jour de chaque fichier. Typiquement, un fichier exécutable est mis à jour à partir des fichiers objets, qui sont, à leur tour, créés en compilant les fichiers source.

Une fois qu'un makefile approprié existe, chaque fois que vous modifiez certains fichiers source, la commande shell Fabriquer suffit pour effectuer toutes les recompilations nécessaires. Le programme make utilise la base de données makefile et les heures de dernière modification des fichiers pour décider quels fichiers doivent être mis à jour. Pour chacun de ces fichiers, il émet les commandes enregistrées dans la base de données.

L'utilitaire make exécute des commandes dans le makefile pour mettre à jour un ou plusieurs noms de cible, où Nom est généralement un programme. Sinon -F l'option est présente, make recherche les makefiles GNUmakefile, makefile, et Makefile, dans cet ordre.

Normalement, vous devriez appeler le makefile soit makefile ou Makefile. (Il est recommandé d'utiliser Makefile car il apparaît en évidence près du début d'une liste de répertoires, près d'autres fichiers importants tels que README.) Le premier nom vérifié, GNUmakefile, n'est pas recommandé pour la plupart des makefiles. N'utilisez ce nom que si un makefile est spécifique à GNU make et ne sera pas compris par les autres versions de make. Si makefile est -, l'entrée standard est lue.

Les Fabriquer L'utilitaire met à jour une cible s'il dépend des fichiers prérequis qui ont été modifiés depuis la dernière modification de la cible, ou si la cible n'existe pas.

Options de l'utilitaire Make

Les -b et -m les options sont ignorées pour la compatibilité avec les autres versions de make.

-C dir des changements à répertoire répertoire avant de lire les makefiles ou de faire quoi que ce soit d'autre. Si plusieurs -C les options sont spécifiées, chacune est interprétée par rapport à la précédente: -C -C etc. est équivalent à -C /etc. Ceci est généralement utilisé avec les invocations récursives de make.

Les -ré L'option imprime les informations de débogage en plus du traitement normal. Les informations de débogage indiquent quels fichiers sont pris en compte pour la refonte, quelles heures de fichier sont comparées et avec quels résultats, quels fichiers doivent être refaits, et quelles règles implicites sont prises en compte et lesquelles sont appliqué.

Les -e L'option donne aux variables extraites de l'environnement la priorité sur les variables des makefiles.

Les -F déposeroption utilise déposer en tant que makefile.

Les -je L'option ignore toutes les erreurs dans les commandes exécutées pour recréer des fichiers.

Les -JE réaloption spécifie un répertoire réal pour rechercher les makefiles inclus. Si plusieurs -je sont utilisées pour spécifier plusieurs répertoires, les répertoires sont recherchés dans l'ordre spécifié. Contrairement aux arguments des autres indicateurs de make, les répertoires avec -JE les drapeaux peuvent venir directement après le drapeau: -Idir est autorisé, ainsi que -Je dir. Cette syntaxe est autorisée pour la compatibilité avec le préprocesseur C -JE drapeau.

Les -j emplois option spécifie le nombre d'emplois (commandes) à exécuter simultanément. S'il y a plus d'un -j option, la dernière est efficace. Si la -j L'option est donnée sans argument, make ne limite pas le nombre de tâches exécutées simultanément.

Les -k l'option continue autant que possible après une erreur. La cible qui a échoué, et celles qui en dépendent, ne peuvent pas être refaites. Cependant, les autres dépendances de ces cibles peuvent être traitées tout de même.

Les -l et -l charge les options spécifient qu'aucune nouvelle tâche (commande) ne doit être démarrée si d'autres tâches sont en cours d'exécution et que la charge moyenne est d'au moins charge (un nombre à virgule flottante). Sans argument, il supprime une limite de charge précédente.

Les -n option imprime les commandes qui seraient exécutées, mais ne les exécute pas.

Les -o déposerl'option ne refait pas le déposer même s'il est plus ancien que ses dépendances et ne refait rien à cause des changements dedéposer. Essentiellement, le fichier est traité comme ancien et ses règles sont ignorées.

Les -p L'option imprime la base de données (règles et valeurs des variables) résultant de la lecture des makefiles. Il s'exécute ensuite comme d'habitude ou comme spécifié autrement. Cela imprime également les informations de version fournies par le -v interrupteur (voir ci-dessous). Pour imprimer la base de données sans essayer de recréer des fichiers, utilisez Fabriquer-p-f/dev/null.

Les -q option définit le mode question. Il n'exécute aucune commande et n'imprime rien. Il renvoie un état de sortie qui est zéro si les cibles spécifiées sont à jour, différent de zéro sinon.

Les -r L'option élimine l'utilisation des règles implicites intégrées. Il efface également la liste par défaut des suffixes pour les règles de suffixe.

Les -s L'option fait taire l'opération. Il n'imprime pas les commandes lorsqu'elles sont exécutées.

Les -S l'option annule l'effet de la -k option. Ce n'est pas nécessaire sauf dans un makewhere récursif -k peut être hérité du make de niveau supérieur via MAKEFLAGS ou si vous définissez -k dans MAKEFLAGS dans votre environnement.

Les -t L'option touche les fichiers (les met à jour sans les modifier) ​​au lieu d'exécuter leurs commandes. Ceci est utilisé pour prétendre que les commandes ont été exécutées, pour tromper les futures invocations de make.

Les -v L'option imprime la version du programme make ainsi qu'un copyright, une liste des auteurs et un avis indiquant qu'il n'y a aucune garantie.

Les -w L'option imprime un message contenant le répertoire de travail avant et après d'autres traitements. Cela peut être utile pour trouver des erreurs dans des imbrications compliquées de commandes make récursives.

Les -W déposer option prétend que la cibledéposera été modifié. Lorsqu'il est utilisé avec le -n flag, cela vous montre ce qui se passerait si vous deviez modifier ce fichier. Sans -n, c'est presque la même chose que d'exécuter un toucher sur le fichier donné avant d'exécuter make, sauf que l'heure de modification n'est modifiée que dans l'imagination de make.