Sto provando a creare un Makefile che colloca i miei file .o
in una directory diversa da quella dei miei file di origine. Sto cercando di utilizzare una regola di pattern in modo da non dover creare regole identiche per ogni file di oggetto & di origine.GNU Crea pattern per generare output in directory diverse da src
mia struttura del progetto sembra qualcosa di simile:
project/
+ Makefile
+ src/
+ main.cpp
+ video.cpp
+ Debug/
+ src/ [contents built via Makefile:]
+ main.o
+ video.o
mio Makefile sembra qualcosa di simile:
OBJDIR_DEBUG = Debug
OBJ_DEBUG = $(OBJDIR_DEBUG)/src/main.o $(OBJDIR_DEBUG)/src/video.o
all: $(OBJ_DEBUG)
$(OBJ_DEBUG): %.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o [email protected]
Questo non funziona, perché sembra per i miei file di origine a Debug/src/*.cpp
.
Ho provato la seguente:
# Broken: make: *** No rule to make target `Debug/src/main.cpp', needed by `Debug/src/main.o'. Stop.
# As a test, works if I change "%.cpp" to "Debug/src/main.cpp", though it obv. builds the wrong thing
# Strip OBJDIR_DEBUG from the start of source files
$(OBJ_DEBUG): %.o: $(patsubst $(OBJDIR_DEBUG)/%,%,%.cpp)
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o [email protected]
# Broken:
# Makefile:70: target `src/main.o' doesn't match the target pattern
# Makefile:70: target `src/video.o' doesn't match the target pattern
# Add OBJDIR_DEBUG in target rule
OBJ = src/main.o src/video.o
$(OBJ): $(OBJDIR_DEBUG)/%.o: %.cpp
$(CXX) $(CFLAGS_DEBUG) $(INC_DEBUG) -c $< -o [email protected]
Questo è l'approccio migliore. – Beta
Cosa succede se ci sono sottodirectory all'interno di OBJDIR_DEBUG? La mia ipotesi è che la compilazione fallirà perché la directory di output non esiste. – aardvarkk