Compréhension simple de Makefile 2

Compréhension simple de Makefile 2

Définissez le chemin de recherche des fichiers dans makefile

Dans le makefile, vous pouvez définir le répertoire de recherche du fichier cible et du fichier dépendant dans la règle en attribuant une valeur à VPATH. Effectuez d'abord une recherche dans le répertoire courant. Si aucun fichier dépendant n'est trouvé, make cherchera à son tour VPATH en fonction des répertoires donnés dans VPATH. VPATH est valide pour tous les fichiers du makefile.
Par exemple: VPATH = src:… / headers La
définition ci-dessus spécifie deux répertoires, "src" et "… / headers", make recherchera dans cet ordre. Les répertoires sont séparés par des "deux-points". (Le répertoire courant est le lieu de recherche ayant la priorité la plus élevée) La
commande vpath peut également être utilisée. La différence avec VPATH en cours d'utilisation est: vpath peut spécifier différents répertoires de recherche pour différents types de fichiers. Par exemple:
vpath% .c / src
vpath% .h… / headers
vpath% .c signifie effacer tous les répertoires de recherche définis par vpath sur% .c (sans le chemin derrière)

Définir des variables et des variables de référence

La définition et l'application des variables sont les mêmes que les variables d'environnement Linux. Le nom de la variable doit être en majuscule. Une fois la variable définie, elle peut être citée en plaçant le nom de la variable entre parenthèses et en le préfixant d'un symbole "$".
Les principales fonctions des variables:
1. Enregistrer la liste des noms de fichiers
2. Enregistrer le nom de la commande exécutable, comme le compilateur
3. Enregistrer les paramètres du compilateur
Les variables sont généralement définies dans l'en-tête du makefile. Par convention, toutes les variables makefile doivent être en majuscules.

Principales variables prédéfinies de GNU make

$ * Nom du fichier cible sans extension
$ + Tous les fichiers dépendants, séparés par des espaces et par ordre d'apparition, peuvent contenir des fichiers dépendants en double
$ <Nom du premier fichier dépendant
$? Tous les fichiers dépendants, Séparés par un espace, la date de modification de ces fichiers dépendants est postérieure à la date de création de la
cible $ @ Le nom complet de la cible
$ ^ Tous les fichiers dépendants, séparés par des espaces, n'incluent pas les fichiers dépendants en double
$% Si la cible est un membre de l'archive, alors La variable représente le nom du membre de l'archive cible

3 variables prédéfinies couramment utilisées

1.  $@     表示要生成的目标
2.  $^     表示全部的依赖文件
3.  $<     表示第一个依赖文件
bin/cn_work : obj/main.o  obj/cn_work.o  obj/fun.o   
	gcc  $^  -o $@  (命令一定要用以Tab开头)
obj/cn_work.o : sources/cn_work.c 
	gcc  -I  headers   -c 	$<	-o  $@
obj/main.o : 	sources/main.c
	gcc  -I  headers   -c 	$<	-o  $@
obj/fun.o  :	 sources/fun.c
	gcc  -I  headers   -c 	$<	-o  $@
clean:
	rm -f bin/cn_work file_o/*.o

Les 3 paramètres de gcc:

  1. -o spécifie le fichier cible
    gcc sources / main.c -o bin / main
  2. -c Produire uniquement des fichiers objets lors de la compilation sans lier
    gcc -c sources / main.c -o obj / main.o
  3. -I spécifie principalement le chemin de recherche du fichier d'en-tête
    gcc -I headers -c main.c -o main.o

Je suppose que tu aimes

Origine blog.csdn.net/weixin_46259642/article/details/113565548
conseillé
Classement