La commande Linux make est l'une des commandes les plus fréquemment utilisées par les administrateurs système et les programmeurs. Elle fait également référence à un « gestionnaire de compilation automatique », où « automatique » signifie qu'il peut découvrir automatiquement les fichiers les plus récents en fonction de l'horodatage du fichier. réduisez la charge de travail, en même temps, il peut effectuer une grande quantité de travail de compilation en lisant le contenu du fichier makefile.
L'environnement d'exploitation de ce tutoriel : système linux5.9.8, ordinateur Dell G3.
Qu'est-ce que la commande Linux make ?
La commande make sous Linux est l'une des commandes les plus fréquemment utilisées par les administrateurs système et les programmeurs. Les administrateurs l'utilisent pour compiler et installer de nombreux outils open source via la ligne de commande, et les programmeurs l'utilisent pour gérer les problèmes de compilation de leurs projets volumineux et complexes.
1. Avantages de la syntaxe make
make project manager est un "gestionnaire de compilation automatique". Le "automatique" signifie ici qu'il peut découvrir automatiquement les fichiers les plus récents en fonction de l'horodatage des fichiers et réduire en même temps la charge de travail. effectue beaucoup de travail de compilation en lisant le contenu du fichier makefile. Les utilisateurs n'ont besoin d'utiliser qu'une seule fois une simple instruction de compilation, ce qui améliore considérablement l'efficacité réelle du projet.
Tout d'abord, imaginons un cas. Supposons que mon fichier exécutable contienne quatre fichiers de code source, à savoir main.c haha.c sin_value.c cos_value.c. Si vous souhaitez que ce programme s'exécute, vous devez le compiler comme ceci
.[root@linux ~]# gcc -c main.c [root@linux ~]# gcc -c haha.c [root@linux ~]# gcc -c sin_value.c [root@linux ~]# gcc -c cos_value.c # 先以上面的动作制作出四个目标文件,然后再进行下面的动作: [root@linux ~]# gcc -o main main.o haha.o sin_value.o cos_value.o \ > -lm -L/usr/lib -L/lib # 这样就可以制作出 main 这个执行档啰!执行看看吧! [root@linux ~]# ./main HaHa! I'm the King of the world 0.706825 0.707388
Si possible, pouvez-vous effectuer toutes les actions ci-dessus pour lui en une seule étape ? Essayez de créer un makefile dans ce répertoire avec le contenu suivant :
# 1. 先建立编译的规则 [root@linux ~]# vi makefile main: main.o haha.o sin_value.o cos_value.o gcc -o main main.o haha.o sin_value.o cos_value.o -lm # 注意:第二行的 gcc 之前是 <tab> 按键产生的空格喔! # 2. 尝试给他建立规则看看 [root@linux ~]# rm -f main *.o <==先将之前的目标文件去除 [root@linux ~]# make cc -c -o main.o main.c cc -c -o haha.o haha.c cc -c -o sin_value.o sin_value.c cc -c -o cos_value.o cos_value.c gcc -o main main.o haha.o sin_value.o cos_value.o -lm # 这个时候 make 会主动去读取 makefile 这个档案的内容, # 并根据内容直接去给他编译起相关的执行档啰! # 3. 如果再执行一次 make 会怎样?! [root@linux ~]# make make: `main' is up to date. # 看到了吧?!是否很方便呢?!
make présente les avantages suivants :
• Simplifie les instructions qui doivent être émises lors de la compilation
• Si un certain code source est modifié une fois la compilation terminée ; fichier, alors make compilera uniquement le fichier modifié, et les autres fichiers objets ne seront pas modifiés ;
• Vous pourrez ensuite mettre à jour le fichier exécutable en fonction des dépendances ;
2. La syntaxe de base de make
Les règles de base de make sont :
目标(target): 依赖条件 1 依赖条件 2 <tab> gcc -o 欲建立的执行文件 依赖条件 1 依赖条件 2
Le makefile contient trois éléments : cible, dépendance et commande. Il n'y a qu'un seul objectif final dans le makefile, et les autres objectifs dépendent de cet objectif.
La cible est les informations que nous voulons créer, et la condition de dépendance est les fichiers objets pertinents. La syntaxe de création d'un fichier exécutable est la ligne commençant par le bouton
• Le # dans le makefile représente un commentaire
•
Vous pouvez utiliser les commandes simplifiées des variables automatisées par défaut du système dans le makefile :
$^:代表所有的依赖条件。 $@:代表目标文件 $<:代表一个目标文件
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!