Bonjour,
A la suite de la lecture sur le cours makefile,
https://gl.developpez.com/tutoriel/outil/makefile/
j'ai plusieurs questions :
La première :
Je ne comprends pas pourquoi dans vos exemples avec vos 2 fichiers sources :
- main.c
- hello.c
Et le fichier d'en tête (header) :
- hello.h
Vous n'incluez pas le fichier header hello.h à la fois dans le main.c et dans hello.c.
Vous ne l'incluez que dans le fichier main.c
Moi j'ai lu dans un livre qu'il fallait impérativement l'inclure dans les 2 fichiers car
le compilateur traite chaque fichier indépendamment les uns des autres.
Et que donc pour faire un contrôle du prototype de la fonction au moment de l'appel dans
main.c. il faut que le fichier header soit doublement inclut (main.c + hello.c)
Sinon ça sert à rien.
Es ce que je raconte des conneries ?
Deuxième question :
Je ne comprends pas cette phrase :
Mais y a qu’un et un seul exécutable ?II-B Makefile enrichi
Un tel Makefile ne permet pas de générer plusieurs exécutables distincs.
Le reste sont des fichiers objets venant eux mêmes des fichiers sources.
Vu que y a qu'une seule fonction main.
Troisième question :
Je ne comprends pas cette phrase.III-B. Variables internes :
$? <=> la liste des dépendances plus récentes que la cible
La liste des dépendances est donnés dans le makefile, par exemple :
Code makefile : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5=============== hello: main.o afficher.o gcc -o hello main.o afficher.o ... ===============
Quatrième question :
Mais de quel fichier il s'agit ? Le fichier CIBLE ?III-B. Variables internes :
$* <=> nom du fichier sans suffixe
On a la liste des dépendances pour l'exécutable hello et également pour touts les autres
fichiers.o intermédiaire ?
Donc je comprends pas le mot "plus récent"
Cinquième question :
Es ce que quelqu'un peut m'expliquer la différence entre le mode debug et le mode release ?IX. Les Makefiles conditionnels :
compiler notre projet tantôt en mode debug, tantôt en mode release
Je comprends rien à cette phrase.
Sixième question :
Supposons que j'ai un répertoire master que je nomme MASTER.X. sous-makefile :
Le makefile maitre est situé dans le répertoire principale
Le sous-make est situé dans le répertoire hello (qui est un sous répertoire du répertoire principale)
Code Makefile maitre : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 ================= export CC=gcc export CFLAGS=-W -Wall -ansi -pedantic export LDFLAGS= HELLO_DIR=hello EXEC=$(HELLO_DIR)/hello all: $(EXEC) $(EXEC): @(cd $(HELLO_DIR) && $(MAKE)) .PHONY: clean mrproper $(EXEC) clean: @(cd $(HELLO_DIR) && $(MAKE) $@) mrproper: clean @(cd $(HELLO_DIR) && $(MAKE) $@) =================
Dans ce répertoire il y a un makefile master.
Ce makefile master appelle 3 autres sous makefile.
Chacun de ses makefile est dans un sous un répertoire (juste un et un seul niveau en dessous).
Dans ce cas il faudra que je fasse dans le makefile maitre :
Pouvez vous me le confirmer ?
Code Makefile maitre : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 ================= export CC=gcc export CFLAGS=-W -Wall -ansi -pedantic export LDFLAGS= HELLO_DIR=hello # Premier sous répertoire du makefile fils AUREVOIR_DIR=aurevoir # Deuxieme sous répertoire du makefile fils BONJOUR_DIR=bonjour # Troisième sous répertoire du makefile fils EXEC_HELLO=$(HELLO_DIR)/hello EXEC_AUREVOIR=$(AUREVOIR_DIR)/aurevoir EXEC_BONOUR=$(BONJOUR_DIR)/bonjour all: $(EXEC_HELLO) $(EXEC_AUREVOIR) $(EXEC_BONJOUR) $(EXEC_HELLO): @(cd $(HELLO_DIR) && $(MAKE)) $(EXEC_AUREVOIR): @(cd $(AUREVOIR_DIR) && $(MAKE)) $(EXEC_BONJOUR): @(cd $(BONJOUR_DIR) && $(MAKE)) .PHONY: clean mrproper $(EXEC) clean: @(cd $(HELLO_DIR) && $(MAKE) $@) mrproper: clean @(cd $(HELLO_DIR) && $(MAKE) $@) =================
Partager