Caractères génériques et Foreach dans Makefile

Caracteres Generiques Et Foreach Dans Makefile



Un fichier est toujours constitué d’un type de contenu différent : qu’il s’agisse d’un simple fichier texte, d’un fichier de code de programme ou de n’importe quel makefile. Le type de contenu de tout fichier le rend unique et le différencie des autres formats de fichiers. Tout comme ça, makefile se compose de règles qui utilisent différents éléments pour effectuer correctement son travail. Parmi ces éléments, il y a le caractère générique et le foreach qui sont nécessaires pour effectuer quelque chose d'unique et d'extra. Dans ce guide, nous discuterons de la puissance des caractères génériques et de foreach lorsqu'ils sont utilisés dans un makefile.

Caractères génériques dans Makefile

En général, le joker est connu pour être un facteur imprévisible et qui peut bouleverser la situation de toutes les manières possibles. Les caractères génériques dans le makefile sont utilisés pour effectuer en prime la détection de tous les modèles possibles à partir d'un répertoire de travail actuel, qu'il s'agisse d'un fichier ou de n'importe quel dossier. Ces fichiers sources peuvent être de n'importe quel type.





Pour utiliser un caractère générique dans un makefile, vous devez utiliser le mot-clé « wildcard » qui suit l'astérisque « * » ou « ? » signe et l’extension de fichier qui est connectée par un point. Vous pouvez également utiliser le « ? » signe pour rechercher un seul caractère et « * » pour correspondre à n'importe quel nombre de caractères. Toute cette structure doit être utilisée entre parenthèses et un signe « $ ». Par exemple, nous déclarons la variable « SRCS » qui obtient son fichier de valeurs via le caractère générique. Ce caractère générique recherche tous les fichiers avec le modèle « cpp » à leur fin.





Foreach dans Makefile

La fonction foreach de makefile fonctionne exactement comme une boucle foreach dans les langages de programmation : parcourir les éléments d'une liste. La fonction foreach du makefile effectue une action particulière sur chaque élément d'une liste. Cet élément peut être une variable ou n'importe quel fichier source. Par exemple, nous élaborons la syntaxe de la fonction foreach dans makefile via la variable SOURCES qui contient une liste de trois fichiers sources. La fonction foreach utilise cette variable SOURCES pour créer le même nom pour trois fichiers objets en itérant la liste des fichiers source et en les enregistrant dans une autre variable « OBJETS ». Les deux dernières lignes montrent comment une règle makefile peut être utilisée pour créer un fichier objet pour chaque fichier C après itération.





SOURCES := fichier1.c fichier2.c fichier3.c
OBJETS := $ ( pour chaque src,$ ( SOURCES ) ,$ ( src:.c=.o ) )
$OBJETS : % .O : % .c
$ ( CC ) $ ( FLAGS ) -c $ < -O $ @

Exemple 1 : Utilisation de caractères génériques

Pour afficher l'illustration et le fonctionnement des caractères génériques et des fonctions foreach, nous introduisons un fichier C++. Ce fichier « salary.cpp » est démarré avec l'utilisation de l'en-tête « iostream » pour permettre une utilisation fluide des flux d'entrée et de sortie. La méthode principale déclare une variable « s » de type entier et l'instruction « cout » pour demander une valeur d'entrée au moment de l'exécution. Le flux d'entrée standard « cin » obtient la valeur d'un utilisateur au moment de l'exécution et l'enregistre dans la variable « s ». Le « cout » affiche la valeur saisie par un utilisateur sur l'écran de la console.

#include
en utilisant l'espace de noms std ;
int main ( ) {
int s ;
cout << « Entrez le salaire : » ;
manger >> s ;
cout << ' \n Salaire: ' << s << fin;
retour 0 ;
}



Nous démarrons le makefile avec la variable « CXX » qui définit le compilateur pour C++, et la variable CXXFLAGS contient les indicateurs du compilateur C++. La variable EXECUTABLE contient le nom d'un fichier exécutable « hello » généré après l'exécution d'un makefile. La variable SRCS récupère tous les fichiers C++ d'un répertoire actuel en utilisant le caractère générique « * » pour rechercher tout modèle se terminant par « .cpp ». La variable OBJS contient les noms des fichiers objets à créer à l'aide de la variable SRCS, en remplaçant l'extension « cpp » par « o ». La cible par défaut « all » construit le makefile et dépend de la variable EXECUTABLE.

La première règle crée le fichier cible « hello » qui dépend du fichier objet de la variable OBJS (noms des fichiers objets) en utilisant les noms de fichiers générés via la variable « OBJS ». La deuxième règle makefile génère le fichier objet avec l'extension « .o » qui dépend du fichier C++ après la compilation du fichier de code C++. Ici, « % » est un caractère générique pour rechercher les noms de fichiers de tout modèle se terminant par « cpp ». En fin de compte, la cible propre utilise sa commande « rm » pour nettoyer de force les fichiers exécutables et objets nouvellement générés à partir d'un répertoire à l'aide de l'indicateur « -f ».

CXX = g++
CXXFLAGS = -Mur -std =c++ onze
EXÉCUTABLE = bonjour
SRCS = $ ( caractère générique * .cpp )
OBJS = $ ( SRCS :.cpp=.o )
tout : $ ( EXÉCUTABLE )
$ ( EXÉCUTABLE ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O : % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
faire le ménage:
rm -F $ ( EXÉCUTABLE ) $ ( OBJS )

Lors de l'exécution de l'instruction « make », les fichiers cible et objet ont été créés. Après avoir exécuté le fichier exécutable « hello », l'utilisateur est invité à saisir un salaire et on ajoute « 67000 ». À la fin, le salaire est affiché.

faire

Exemple 2 : utilisation de Foreach

Après avoir utilisé les caractères génériques, il est temps d'utiliser la fonction foreach dans makefile. Le reste du code makefile est le même. À la ligne 6, nous initialisons une autre variable qui est « NAMES » avec une liste de trois valeurs – Kate, Kim, Tim. La cible « all » par défaut dépend de la variable EXECUTABLE (nom du fichier cible « hello ») et de l'instruction foreach. La fonction « addprefix » itère la variable « NAMES » pour générer dynamiquement les noms cibles en préfixant « run_ » au début de chaque nom de la liste « NAMES ».

La règle à la huitième ligne indique qu'un fichier cible exécutable de sortie, c'est-à-dire bonjour, dépend de « OBJS ». L'indicateur «-o» génère le fichier de sortie cible à l'aide de l'OBJS. La règle de la dixième ligne génère le fichier objet cible en utilisant les fichiers source avec l'extension « cpp ». Pour ce faire, l'indicateur «-c» est utilisé pour compiler un fichier source et générer le fichier objet associé nécessaire à la génération cible. À la treizième ligne, nous utilisons la variable EXECUTABLE pour générer la sortie avec différents noms commençant par « run_ » comme préfixe. En fin de compte, la cible propre et les cibles Phony supprimeront et nettoieront les fichiers objet et cible.

CXX = g++
CXXFLAGS = -Mur -std =c++ onze
# fichier cible exécutable
EXÉCUTABLE = bonjour
SRCS = $ ( caractère générique * .cpp )
OBJS = $ ( SRCS :.cpp=.o )
# Liste des noms
NOMS = Kate Kim Tim
# Cibles
tout : $ ( EXÉCUTABLE ) $ ( ajouter le préfixe run_, $ ( DES NOMS ) )
$ ( EXÉCUTABLE ) : $ ( OBJS )
$ ( CXX ) $ ( CXXFLAGS ) -O $ @ $ ( OBJS )
% .O : % .cpp
$ ( CXX ) $ ( CXXFLAGS ) -c $ < -O $ @
# Créer des cibles pour chaque nom
courir_ % : $ ( EXÉCUTABLE )
. / $ ( EXÉCUTABLE ) $*
faire le ménage:
rm -F $ ( EXÉCUTABLE ) $ ( OBJS )
# De fausses cibles
.PHONY : tout est propre

L'utilisation de l'instruction « make » génère la cible exécutable « hello » et exécute le programme pour chaque nom spécifié dans la variable « NAMES ».

faire

Vous pouvez également modifier votre sortie en utilisant le nom d'une liste avec le préfixe « run_ ».

Faites run_Kim

Conclusion

Ce guide traite de l'utilisation des caractères génériques et des concepts foreach dans le makefile tout en discutant de leur syntaxe séparément. Après cela, nous avons discuté des exemples de code pour élaborer sur chacun de leurs résultats en matière d'obtention des fichiers avec les mêmes extensions et d'itération des valeurs dans une liste de variables.