Jestem nowicjuszem w Makefiles i g ++, i mam problem z generowaniem zależności plików projektu za pomocą flagi -MM. Zamieszczam plik Makefile, którego używam do rozpatrzenia. Proszę spojrzeć.Problem generujący zależności w Makefile przy użyciu -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]
Próbowałem kilka opcji i wiele razy. Szukałem go, szukałem rozwiązania, ale nie mogłem go znaleźć.
Czy używa się flagi "-MM" do generowania zależności z odpowiednią opcją? Jeśli nie, zaproponuj mi właściwy sposób generowania zależności. Chciałem wygenerować zależności automatycznie, ponieważ mój projekt będzie miał wiele różnych plików. Myślałem, że jest lepszą opcją niż ręczne zapisywanie zależności.
Są to błędy Dostaję
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.
Z góry dzięki.
Co to znaczy "DEPS = $ (OBJS:%. O =%. D)"? Dlaczego czasami używasz ": =", a czasami "="? –
Tworzy DEPS z nazwami obiektów w katalogu obiektów. Właśnie testuję z opcjami "=" i ": =", ale nie znam dokładnej różnicy b/w je – Jabez