Linux: Variables (ou Macros) dans l'utilitaire GNU make Utilitaires

L'utilitaire de création GNU sous Linux vient à votre secours en lisant et en interprétant un fichier makefile . En plus de la capacité de base de construire des cibles à partir de dépendants, GNU make inclut de nombreuses fonctionnalités qui vous permettent d'exprimer facilement les dépendances et les règles de construction d'une cible à partir de ses dépendants.

Si vous avez besoin de compiler un grand nombre de fichiers C ++ en utilisant GCC avec les mêmes options, par exemple, taper les options pour chaque fichier est fastidieux. Vous pouvez éviter cette tâche répétitive en définissant une variable ou une macro dans make comme suit:

 # Définir les macros pour le nom du compilateur CXX = g ++ # Définir une macro pour les drapeaux GCC CXXFLAGS = -O2 -g -mcpu = i686 # Règle pour construire un formulaire de fichier objet. o: forme. Forme C h $ (CXX) -c $ (CXXFLAGS) forme. C 

Dans cet exemple, CXX et CXXFLAGS sont des variables make. (GNU make préfère les appeler variables, mais la plupart des utilitaires Unix les appellent macros .)

Pour utiliser une variable n'importe où dans le makefile, commencez par un signe dollar ($ ) suivi de la variable entre parenthèses. GNU make remplace toutes les occurrences d'une variable par sa définition; ainsi, il remplace toutes les occurrences de $ (CXXFLAGS) par la chaîne -O2 -g -mcpu = i686.

GNU make a plusieurs variables prédéfinies qui ont des significations spéciales. Ce tableau liste ces variables. En plus des variables listées ici, GNU make considère toutes les variables d'environnement (telles que PATH et HOME) comme des variables prédéfinies.

Certaines variables prédéfinies dans GNU make
Variable Signification
$% Nom de membre pour les cibles qui sont des archives. Si la cible est
libDisp. a (image. o), par exemple, $% est image. o.
$ * Nom du fichier cible sans l'extension.
$ + Noms de tous les fichiers dépendants avec des dépendances en double,
répertoriés dans leur ordre d'occurrence.
$ << Le nom du premier fichier dépendant. $?
Noms de tous les fichiers dépendants (avec des espaces entre les noms) plus récents que la cible.
$ @
Nom complet de la cible. Si la cible est libDisp. une image o), par exemple, $ @ est libDisp. une. $ ^
Noms de tous les fichiers dépendants, avec des espaces entre les noms. Les doublons sont supprimés des noms de fichiers dépendants.
AR
Nom du programme de conservation des archives (valeur par défaut: ar). ARFLAGS
Drapeaux pour le programme de conservation des archives (valeur par défaut: rv). AS
Nom du programme assembleur qui convertit la langue de l'assemblage en code objet (valeur par défaut: as).
ASFLAGS
Drapeaux pour l'assembleur. CC
Nom du compilateur C (valeur par défaut: cc). CFLAGS
Indicateurs transmis au compilateur C. CO
Nom du programme qui extrait un fichier de RCS (valeur par défaut : co).
COFLAGS
Drapeaux pour le programme commun RCS. CPP
Nom du préprocesseur C (valeur par défaut: $ (CC) -E). CPPFLAGS
Drapeaux pour le préprocesseur C. CXX
Nom du compilateur C ++ (valeur par défaut: g ++). CXXFLAGS
Indicateurs transmis au compilateur C ++. FC
Nom du compilateur FORTRAN (valeur par défaut: f77). FFLAGS
Drapeaux pour le compilateur FORTRAN. LDFLAGS
Drapeaux pour le compilateur quand il est supposé appeler le ld .
RM
Nom de la commande pour supprimer un fichier (Valeur par défaut: rm -f).