Sono nuovo di Makefiles e g ++ e sono colpito da un problema durante la generazione di dipendenze dei file di progetto usando -MM flag. Sto postando il Makefile che sto usando per la tua considerazione. Per favore dai un'occhiata.Problema nella generazione delle dipendenze nel 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]
Ho provato diverse opzioni e mooolto molte volte. Ho cercato su Google la soluzione, ma non ho trovato nulla.
Sta usando il flag "-MM" per generare dipendenze l'opzione giusta ?? In caso contrario, suggeriscimi il modo giusto per generare le dipendenze. Volevo generare automaticamente le dipendenze perché il mio progetto ha tantissimi file. Ho pensato che fosse l'opzione migliore rispetto a scrivere manualmente la dipendenza evey.
Questi sono gli errori sto ottenendo
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.
Grazie in anticipo.
Che cosa si intende fare "DEPS = $ (OBJS:%. O =%. D)"? E perché a volte usi ': =' e qualche volta '='? –
Sta creando DEPS con i nomi degli oggetti nella directory degli oggetti. Sto solo testando con entrambe le opzioni '=' e ': =', ma non so la differenza esatta con loro – Jabez