je la configuration suivante pour mon C++ projet:makefile détection automatique des fichiers src et génération dépendance
dans le dossier src, il y a * Cpp et correspondant * .h et dans les dossiers Obj-I Je veux avoir mes fichiers .o. Jusqu'à présent, la compilation et la liaison ne posent pas de problème. Mais maintenant j'ai trop de fichiers .cpp et .h pour les mettre dans le Makefile manuellement. Je décide donc d'écrire cette petite instruction dans le makefile:
collect_sources:
@echo "collecting source files";
@echo "SRCS = \\" > sources;
@for file in ./src/*.cpp; \
do \
echo "$$file \\" >> sources; \
done
Je fais aussi
-include sources
au début du makefile
Le fichier résultant sources
semble bien, bien qu'il y ait backslash dans la dernière ligne que je n'aime pas. Mais ça devrait être dangereux aussi.
J'ai maintenant aussi besoin de créer automatiquement des dépendances. Dans ma dernière version dans laquelle je définissais les fichiers * .cpp-en SRCS
directement dans le Makefile, le code suivant était bon:
$(SRCDIR)/%.cpp:
@$(CXX) $(DEPFLAGS) -MT \
"$(subst $(SRCDIR),$(OBJDIR),$(subst $(EXT_SRC),$(EXT_OBJ),$$file))" \
$(addprefix ,$$file) >> $(DEP);
clear_dependencies:
echo "" > $(DEP);
depend: clear_dependencies $(SRCS)
Mais avec notamment le sources
-file, il ne parvient jamais au bloc de code supérieur.
Voici les constantes définies en haut du makefile:
CXX = g++
CXXFLAGS = -Wall \
-Wextra \
-Wuninitialized \
-Wmissing-declarations \
-pedantic \
-O3 \
-p -g -pg
LDFLAGS = -p -g -pg
DEPFLAGS = -MM
SRCDIR = ./src
OBJDIR = ./obj
TARGET = ./bin/my_funky_function_which_is_not_the_real_name
-include sources
OBJSTMP = $(SRCS:.cpp=.o)
OBJS = $(OBJSTMP:$(SRCDIR)=$(OBJDIR))
DEP = depend.main
EXT_SRC = .cpp
EXT_OBJ = .o
Qu'est-ce que je manque? Est-ce que mon approche est valide/faisable?
sur une note de côté: s'il vous plaît ne suggérer aucun outil qui le fait déjà. Je veux vraiment comprendre cela et avoir un contrôle total sur ce qui se passe. – stefan
Il y a une erreur simple et beaucoup d'amélioration possible. Jusqu'où veux-tu aller? – Beta
étape par étape à l'optimum absolu ;-) – stefan