Soy nuevo en Makefiles y g ++ y me golpea un problema al generar dependencias de los archivos de proyecto usando el indicador -MM. Estoy publicando el Makefile que estoy usando para su consideración. Por favor echa un vistazo.Problema que genera dependencias en Makefile usando -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]
Probé varias opciones y tan muchas veces. Busqué en Google la solución pero no pude encontrar ninguna.
¿Está usando el indicador "-MM" para generar dependencias la opción correcta? Si no, sugiérame la forma correcta de generar las dependencias. Quería generar dependencias automáticamente porque mi proyecto tendrá tantos archivos. Pensé que era la mejor opción que anotar cada dependencia manualmente.
Estos son los errores que estoy recibiendo
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.
Gracias de antemano.
¿Qué es "DEPS = $ (OBJS:%. O =%. D)" se supone que está haciendo? ¿Y por qué a veces usas ': =' y algunas veces '='? –
Está creando DEPS con los nombres de los objetos en el directorio de objetos. Solo estoy probando con las opciones '=' y ': = ", pero no sé la diferencia exacta b/w – Jabez