Le Linux faire La commande est utilisée pour créer et maintenir des groupes de programmes et de fichiers à partir du code source. Sous Linux, c'est l'une des commandes les plus fréquemment utilisées par les développeurs. Il aide les développeurs à installer et compiler de nombreux utilitaires à partir du terminal. De plus, il gère le processus de compilation des projets de grande envergure. Cela économise le temps de compilation.
L'objectif principal de la commande make est de déterminer un programme volumineux en plusieurs parties et de vérifier s'il doit être recompilé ou non. Aussi, il émet les ordres nécessaires pour les recompiler.
Dans cette section, nous utiliserons des programmes C++ puisque le langage de programmation C++ est un langage orienté objet, mais vous pouvez utiliser n'importe quel langage installé sur votre machine. Cela ne se limite pas aux programmes ; nous pouvons également l'utiliser pour décrire d'autres tâches.
Comment fonctionne la commande make ?
La commande make prend les cibles comme arguments. Ces arguments sont spécifiés dans « Makefile ». Le makefile contient les cibles ainsi que les actions associées liées à ces cibles.
Lorsque nous exécutons la commande make, elle recherche le makefile et l'analyse pour trouver la cible et accéder à ses dépendances. Si les dépendances ne sont pas spécifiées, il recherchera la dépendance et la construira. Il construira la cible principale une fois les dépendances construites.
Par exemple, si nous voulons modifier un seul fichier source et que nous exécutons la commande make ; ainsi, cela compilera uniquement le fichier objet connecté à ce fichier source. Cela permettra de gagner beaucoup de temps lors de la compilation finale du projet.
Qu’est-ce que Makefile ?
La commande make invoque l'exécution du makefile. Il s'agit d'un fichier spécial qui contient les commandes shell que nous créons pour maintenir le projet. Le makefile contient des cibles et des commandes à exécuter. Il n'est pas permis de créer plus d'un makefile. Il est recommandé de créer un répertoire séparé pour celui-ci.
Il garde une trace des fichiers récents, donc ne mettez à jour que les fichiers requis. Si nous avons un gros programme avec de nombreux fichiers sources, nous devons recompiler tous les fichiers dépendants. Cela peut donc prendre beaucoup de temps.
Le makefile contient une liste de normes. Ces normes sont utiles au système pour comprendre quelle commande nous voulons exécuter. Ces normes sont divisées en deux parties et séparées par une nouvelle ligne. La première ligne est la ligne de dépendance, et les lignes suivantes sont considérées comme actions ou commandement s. Les commandes sont séparées par une tabulation dans la nouvelle ligne.
Le dépendances spécifier la relation de chaque fichier avec les fichiers source. Et le cible est un fichier exécutable et il est créé après l’exécution de la commande make.
Possibilités
La commande make facilite diverses options pour la rendre plus spécifique. Certaines options importantes sont les suivantes :
make -p -f/dev/null.
Comprenons quelques exemples de la commande make. Nous verrons l'utilisation de base du makefile, et plus loin, nous créerons quelques programmes C++ et un makefile. Nous allons effectuer quelques opérations dessus pour mieux comprendre la commande make.
inverser la chaîne java
Utilisation de base de la commande make
Comprenons l'utilisation très basique de la commande make, et cela peut vous aider à comprendre comment elle fonctionne.
Créez un répertoire « projet » et modifiez-y le répertoire. Considérez les commandes ci-dessous :
mkdir project cd project
Créez maintenant un 'Makefile' ayant le contenu suivant pour le premier programme :
commande tactile sous Linux
say_hello: echo 'Hello World!'
D'après le fichier ci-dessus, say_hello est une cible qui se comporte comme une fonction dans n'importe quel langage de programmation, et echo sera considéré comme une action. Il ne faut pas oublier que l'action doit être écrite en utilisant un LANGUETTE. La cible et l'action créent ensemble une règle pour le makefile. Maintenant, exécutez la commande make comme suit :
Considérez le résultat ci-dessous :
À partir de la sortie ci-dessus, nous pouvons voir que l’opération d’écho elle-même s’affiche. Si nous ne voulons pas afficher la commande echo sur la sortie, exécutez l'écho en commençant par '@' symbole. Pour supprimer l'écho, mettez à jour le contenu du makefile comme suit :
say_hello: @echo 'Hello World!'
Considérez le résultat ci-dessous :
Une cible peut être un fichier binaire qui dépend des actions.
Ajoutons quelques cibles supplémentaires, telles que générer et lister dans le makefile. Mettez à jour le makefile comme suit :
say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Si nous exécutons la commande make, elle n'exécute que la première cible car c'est la cible par défaut du makefile. Considérez le résultat ci-dessous :
Nous pouvons modifier la cible par défaut en incluant le contenu ci-dessous dans notre makefile :
.DEFAULT_GOAL := generate
Ajoutez-le à la première ligne du fichier comme suit :
Le makefile ci-dessus considérera « générer » comme objectif par défaut. Exécutez la commande make et elle donnera le résultat suivant :
L'option DEFAULT GOAL exécutera une seule cible pour spécifier plusieurs cibles pour utiliser toutes les options. Pour spécifier plusieurs cibles, mettez à jour la première ligne du makefile comme suit :
all: say_hello generate
Il exécutera la cible spécifiée. Considérez le résultat ci-dessous :
Il existe une autre option qui nous permet d'exécuter toutes les cibles. Si nous voulons exécuter toutes les cibles du makefile, mettez à jour le fichier comme suit :
.PHONY: all say_hello generate list say_hello: @echo 'Hello World!' generate: @echo 'Creating files' touch file-{1..5}.txt list: @echo 'Listing files' ls
Le fichier ci-dessus exécutera toutes les cibles spécifiées. Exécutez la commande make, considérez le résultat ci-dessous :
Utilisation avancée de la commande make
Créons un projet C++ contenant les fichiers main.cpp, function1.cpp, function2.cpp et un fichier de dépendances function.h.
Le code des fichiers est le suivant :
différence de dates dans Excel
main.cpp :
#include #include 'functions.h' int main() { print_hello(); std::cout<< std::endl; std::cout<< 'The factorial of 5 is' << factorial(5) << std:: endl; return 0; }
fonction1.cpp :
#include 'functions.h' int factorial(int n) { if(n!=1) { return (n * factorial(n-1)); } else return 1; }
fonction2.cpp :
#include #include 'functions.h' void print_hello() { std::cout << 'Hello World'; }
fonctions.h :
void print_hello(); int factorial (int n);
Créez maintenant un fichier exécutable du projet ci-dessus en exécutant la commande ci-dessous :
g++ main.cpp function1.cpp function2.cpp -o hello
La commande ci-dessus créera un fichier exécutable 'Bonjour' des fichiers main.cpp, function1.cpp et function2.cpp.
Considérez le résultat ci-dessous :
À partir de la sortie ci-dessus, si elle est exécutée avec succès, elle ne donnera aucune sortie.
Effectuons la même tâche en utilisant le makefile.
Créez un fichier comme Makefile et mettez-y le code ci-dessous.
all: g++ main.cpp function1.cpp function2.cpp -o hello
Le mot clé all est utilisé pour target et en nouvelle ligne, placez la même commande avec un TAB que ci-dessus pour spécifier l'opération. Enregistrez le fichier. Considérez le fichier ci-dessous :
Pour fonctionner, exécutez la commande comme suit :
java convertir un caractère en chaîne
make
La commande ci-dessus créera un fichier exécutable « bonjour » des fichiers spécifiés. Considérez le résultat ci-dessous :
Ajoutons quelques tâches supplémentaires à Makefile. Ajouter une tâche 'compiler' comme suit:
all: compile: g++ main.cpp function1.cpp function2.cpp -o hello
Pour exécuter la tâche compiler, exécutez la commande ci-dessous :
make compile
La commande ci-dessus exécutera la tâche de compilation. Considérez le résultat ci-dessous :
Effectuons quelques tâches supplémentaires sur notre makefile.
mettez à jour le Makefile comme suit :
all: hello hello: main.o function1.o function2.o g++ main.o function1.o function2.o -o hello main.o: main.cpp g++ -c main.cpp function1.o: function1.cpp g++ -c function1.cpp function2.o: function2.cpp g++ -c function2.cpp clean: rm -rf *o hello
À partir du makefile ci-dessus, nous avons créé trois objets comme main.o, function1.o et function2.o. De plus, nous avons fourni les dépendances pour les cibles main.o, function1.o et function2.o comme main.cpp, function1.cpp et function2.cpp respectivement. Toutes les cibles y effectueront les tâches spécifiées. Nous avons également spécifié une cible propre pour nettoyer toutes les dépendances et supprimer le fichier exécutable.
Exécutez maintenant la commande make all pour exécuter notre nouveau makefile.
make all
Considérez le résultat ci-dessous :
À partir de la sortie ci-dessus, nous pouvons voir que la commande a d'abord exécuté respectivement main.o, function1.o et function2.o. Il créera le fichier exécutable et objets des fichiers donnés. Il n'exécutera pas la cible propre car nous ne l'avons pas spécifiée dans hello. Considérez les fichiers ci-dessous :
La commande make a un processus de travail simple. Il a exécuté toutes les options et est allé bonjour. Après l'exécution de hello, il lit la cible dans l'ordre spécifié. Il a recherché chaque cible et ses dépendances et les a exécutés dans l'ordre.
Pour supprimer les objets et le fichier exécutable, effectuez la tâche de nettoyage. Pour effectuer la tâche de nettoyage, exécutez la commande comme suit :
make clean
Considérez le résultat ci-dessous :
La commande ci-dessus supprimera tous les objets et fichiers exécutables. Voir l'instantané ci-dessous du répertoire :
À partir de l'image ci-dessus, nous pouvons voir que nous avons nettoyé notre répertoire.
Variables dans la commande make
Nous pouvons définir les variables dans notre makefile. Pour définir les variables, utilisez le '=' opérateur. Par exemple, si nous voulons créer une variable A et lui attribuer une commande gcc, affectez-la comme :
fonction chr python
A=g++
Utilisez-le comme suit dans notre makefile :
hello: hello.cpp ${A} hello.cpp -o hello
Il est transmis au terminal sous la forme :
g++ hello.cpp -o hello
Nous pouvons utiliser $(A) au lieu de ${A}, car les deux sont traités de la même manière par le script.
Commentaires dans le makefile
Pour ajouter un commentaire dans le makefile, utilisez le '#' symbole. Par exemple, pour ajouter un commentaire dans la section compilation, ajoutez-le comme '# Cela compilera le programme .' Les commentaires sont ignorés par le compilateur.