Je suis nouveau sur Makefiles et g ++ et je suis frappé par un problème lors de la génération de dépendances des fichiers de projet en utilisant l'option -MM. Je poste le Makefile que j'utilise pour votre considération. S'il vous plaît, jetez un oeil.Problème de génération de dépendances dans Makefile en utilisant -MM
OUTPUT_ROOT := output/
SOURCE_ROOT := source/
TITLE_NAME := TestProj
SOURCES := \
MyFile.cpp \
stdAfx.cpp \
Main.cpp \
OUT_DIR := $(OUTPUT_ROOT)
OUT_O_DIR := $(OUT_DIR)
OBJS = $(SOURCES:%.cpp=$(OUT_O_DIR)%.o)
DEPS = $(OBJS:%.o=%.d)
DIRS = $(subst /,/,$(sort $(dir $(OBJS))))
SOURCE_TARGET = $(SOURCES:%.cpp=$(SOURCE_ROOT)%.cpp)
OUTPUT_TARGET = $(OUT_DIR)$(TITLE_NAME)
#---------------------------------------------------------------------
# executables
#---------------------------------------------------------------------
MD := mkdir -p
RM := rm
CC := g++
#---------------------------------------------------------------------
# rules
#---------------------------------------------------------------------
.PHONY: clean directories objects title
all: directories objects title
directories:
@$(MD) $(DIRS)
clean:
$(RM) -rf $(OUT_DIR)
$(OBJS): $(SOURCE_TARGET)
@$(CC) -c $< -o [email protected]
$(DEPS): $(SOURCE_TARGET)
@$(CC) -c -MM $< > $(DEPS)
-include $(DEPS)
objects:$(OBJS) $(DEPS)
title: $(OBJS)
@$(CC) $< -o [email protected]
J'ai essayé plusieurs options et tellement de fois. J'ai cherché la solution mais je n'en ai pas trouvé.
L'option "-MM" est utilisée pour générer les dépendances. Si ce n'est pas le cas, veuillez me suggérer la bonne façon de générer les dépendances. Je voulais générer des dépendances automatiquement car mon projet aurait tellement de fichiers. Je pensais que c'est la meilleure option que d'écrire une dépendance evey manuellement.
Ce sont les erreurs que je reçois
g++: stdAfx.d: No such file or directory
g++: Main.d: No such file or directory
make: *** No rule to make target `stdAfx.d', needed by `objects'. Stop.
Merci à l'avance.
Que signifie "DEPS = $ (OBJS:% .o =% .d)"? Et pourquoi utilisez-vous parfois ': =' et parfois '='? –
Il crée DEPS avec les noms des objets dans le répertoire de l'objet. Je suis juste en train de tester avec les options '=' et ': =', mais je ne connais pas la différence exacte entre eux – Jabez