Rechercher

2.5. Gérer plus de code avec Make

download PDF

L'utilitaire GNU Make, communément abrégé make, est un outil permettant de contrôler la génération d'exécutables à partir de fichiers sources. make détermine automatiquement quelles parties d'un programme complexe ont été modifiées et doivent être recompilées. make utilise des fichiers de configuration appelés Makefiles pour contrôler la manière dont les programmes sont construits.

2.5.1. Aperçu de GNU make et Makefile

Pour créer une forme utilisable (généralement des fichiers exécutables) à partir des fichiers sources d'un projet particulier, il convient d'effectuer plusieurs étapes nécessaires. Enregistrez les actions et leur séquence afin de pouvoir les répéter ultérieurement.

Red Hat Enterprise Linux contient GNU make, un système de construction conçu à cet effet.

Conditions préalables

  • Comprendre les concepts de compilation et de liaison

GNU make

GNU make lit les Makefiles qui contiennent les instructions décrivant le processus de construction. Un Makefile contient plusieurs rules qui décrivent une manière de satisfaire une certaine condition (target) avec une action spécifique (recipe). Les règles peuvent dépendre hiérarchiquement d'une autre règle.

En lançant make sans aucune option, il recherche un Makefile dans le répertoire courant et tente d'atteindre la cible par défaut. Le nom du fichier Makefile peut être l'un des noms suivants : Makefile, makefile, et GNUmakefile. La cible par défaut est déterminée à partir du contenu du Makefile.

Détails du Makefile

Les Makefiles utilisent une syntaxe relativement simple pour définir variables et rules, qui consiste en une target et une recipe. La cible spécifie ce qui est produit si une règle est exécutée. Les lignes contenant des recettes doivent commencer par le caractère TAB.

Typiquement, un Makefile contient des règles pour la compilation des fichiers sources, une règle pour lier les fichiers objets résultants, et une cible qui sert de point d'entrée au sommet de la hiérarchie.

Considérons l'exemple suivant Makefile pour la construction d'un programme C qui consiste en un seul fichier, hello.c.

all: hello

hello: hello.o
        gcc hello.o -o hello

hello.o: hello.c
        gcc -c hello.c -o hello.o

Cet exemple montre que pour atteindre la cible all, le fichier hello est nécessaire. Pour obtenir hello, il faut hello.o (lié à gcc), qui est à son tour créé à partir de hello.c (compilé par gcc).

La cible all est la cible par défaut car c'est la première cible qui ne commence pas par un point (.). L'exécution de make sans argument est donc identique à l'exécution de make all, lorsque le répertoire courant contient ce Makefile.

Fichier makefile typique

Un Makefile plus typique utilise des variables pour la généralisation des étapes et ajoute une cible "clean" - supprimer tout sauf les fichiers sources.

CC=gcc
CFLAGS=-c -Wall
SOURCE=hello.c
OBJ=$(SOURCE:.c=.o)
EXE=hello

all: $(SOURCE) $(EXE)

$(EXE): $(OBJ)
        $(CC) $(OBJ) -o $@

%.o: %.c
        $(CC) $(CFLAGS) $< -o $@

clean:
        rm -rf $(OBJ) $(EXE)

L'ajout de fichiers sources supplémentaires à un tel Makefile ne nécessite que de les ajouter à la ligne où la variable SOURCE est définie.

Ressources supplémentaires

2.5.2. Exemple : Construction d'un programme C à l'aide d'un fichier Makefile

Créez un exemple de programme C à l'aide d'un fichier Makefile en suivant les étapes de cet exemple.

Conditions préalables

  • Vous devez comprendre les concepts de Makefiles et de make.

Procédure

  1. Créez un répertoire hellomake et allez dans ce répertoire :

    $ mkdir hellomake
    $ cd hellomake
  2. Créez un fichier hello.c avec le contenu suivant :

    #include <stdio.h>
    
    int main(int argc, char *argv[]) {
      printf("Hello, World!\n");
      return 0;
    }
  3. Créez un fichier Makefile avec le contenu suivant :

    CC=gcc
    CFLAGS=-c -Wall
    SOURCE=hello.c
    OBJ=$(SOURCE:.c=.o)
    EXE=hello
    
    all: $(SOURCE) $(EXE)
    
    $(EXE): $(OBJ)
            $(CC) $(OBJ) -o $@
    
    %.o: %.c
            $(CC) $(CFLAGS) $< -o $@
    
    clean:
            rm -rf $(OBJ) $(EXE)
    Important

    Les lignes de la recette du Makefile doivent commencer par le caractère tabulation ! Lorsque vous copiez le texte ci-dessus à partir de la documentation, le processus de copier-coller peut coller des espaces à la place des tabulations. Si cela se produit, corrigez le problème manuellement.

  4. Exécuter make:

    $ make
    gcc -c -Wall hello.c -o hello.o
    gcc hello.o -o hello

    Cela crée un fichier exécutable hello.

  5. Exécutez le fichier exécutable hello:

    $ ./hello
    Hello, World!
  6. Exécutez la cible Makefile clean pour supprimer les fichiers créés :

    $ make clean
    rm -rf hello.o hello

2.5.3. Ressources documentaires pour make

Pour plus d'informations sur make, voir les ressources listées ci-dessous.

Documentation installée

  • Utilisez les outils man et info pour consulter les pages de manuel et les pages d'information installées sur votre système :

    $ man make
    $ info make

Documentation en ligne

Red Hat logoGithubRedditYoutubeTwitter

Apprendre

Essayez, achetez et vendez

Communautés

À propos de la documentation Red Hat

Nous aidons les utilisateurs de Red Hat à innover et à atteindre leurs objectifs grâce à nos produits et services avec un contenu auquel ils peuvent faire confiance.

Rendre l’open source plus inclusif

Red Hat s'engage à remplacer le langage problématique dans notre code, notre documentation et nos propriétés Web. Pour plus de détails, consultez leBlog Red Hat.

À propos de Red Hat

Nous proposons des solutions renforcées qui facilitent le travail des entreprises sur plusieurs plates-formes et environnements, du centre de données central à la périphérie du réseau.

© 2024 Red Hat, Inc.