Hum ... Je crois que tu te prends trop la tête :-)
Envoyé par
Ruok
La commande qui doit être lancée est : gmake make_c.mk boot.elf
Elle est compliquée ta commande ! Moi je tape "make" et tout est fait de manière transparente (génération des dépendances, compilation des objets et enfin liaison) !
Envoyé par
Ruok
J'ai besoin de déterminer automatiquement, dans le make_c.mk, les dépendances de la cible %.elf par extraction des dépendances explicites définies dans le makefile spécifique (dans notre cas : Les dépendances explicites sont représentées par l'expression en vert et le makefile spécifique est "boot.mk" dont le nom est identique (à l'extension près) au nom de la cible référencée (boot.elf ici)).
En français ça donne ?
Envoyé par
Ruok
Ma question (ouf
) : Comment vous y prendriez-vous pour récupérer les dépendances ?
Pour un programme en C ou C++ : il existe l'option "-MM" de GCC qui extrait les dépendances (includes, les .h). Moi je génère toutes les dépendances, et je les écris dans le fichier make.dep que j'inclue ensuite. Mon makefile type "simplifié" (dans messages textes par ex.) ... euh, je veux le découper pour plus de clareté :
1) Varibles
1 2 3 4 5 6 7 8 9 10 11
| #Liste des fichiers sources
SOURCES=$(sort $(wildcard *.cpp))
OBJECTS=$(patsubst %.cpp,%.o,$(SOURCES))
CXX=g++
BIN=wormux
CXXFLAGS=-Wall -g
LIBS=(...)
# Utilise les séquences d'échappement ANSI ?
UTILISE_ESC=1 |
2) Rêgle de compilation par défaut (make tout court)
all: checklib depend compile
3) Dépendances
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| # Rêgle de dépendance : écrit tout dans make.dep, puis inclu ce dernier
depend:
@echo -n "Creation des dependances (make.dep) "
@rm -f make.dep
@echo -n "["
# Barre d'avancement :-)
ifdef UTILISE_ESC
@$(foreach source,$(SOURCES), echo -n ".";)
@echo -e -n "]\\b"
@$(foreach source,$(SOURCES), echo -n -e "\\b";)
endif
@$(foreach source,$(SOURCES), echo -n "*"; $(CXX) -MM $(source) >>make.d
ep;)
@echo "]"
-include make.dep |
4) Compilation des objets
1 2 3
| # Compile les dépendances puis lie le tout ensemble
compile: $(OBJECTS)
@$(CXX) -o $(BIN) $(CXXFLAGS) $(LIBS) $(OBJECTS) |
Envoyé par
Ruok
NB : Le makefile générique make_c.mk doit uniquement se baser sur des règles implicites.
Pour utiliser du shell :
1 2
| regle:
<tab>commande shell |
Et puis c'est tout !
Si tu veux te servir du résultat du shell dans ton makefile -> tu écris dans un fichier que tu inclue.
Envoyé par
Ruok
Merci beaucoup à tous ceux qui ont pris la peine de lire jusque là !
De rien.
Si t'as d'autres questions : poste les ici, je suis "averti lorsqu'une réponse est postée".
@+ Haypo
Partager