Tengo un proyecto pequeño de C++ usando GNU Make. Me gustaría ser capaz de convertir los siguientes archivos de origen:Salida de estructura de directorio de archivos de objeto plano con GNU Make
src/
a.cpp
b/
b.cpp
c/
c.cpp
en la siguiente estructura de salida (no estoy preocupado por duplicados en este punto):
build/
a.o
b.o
c.o
Hasta ahora tengo los siguientes, que por desgracia pone el .oy .d uno al lado del .cpp:
OBJS := $(foreach file,$(SRCS),$(file).o)
DEPS := $(patsubst %.o,%.d,$(OBJS))
sinclude $(DEPS)
$(OBJS) : %.o : %.cpp
@echo Compiling $<
$(CC) $(CC_FLAGS) $(INCS) -MMD -o [email protected] $<
soy consciente de la (notdir ...) la función $, pero en este momento mis esfuerzos para usarlo para filtrar los objetos ha fallado. ¿Alguien puede arrojar algo de luz sobre esto? Parece algo bastante razonable de hacer.
Ok, usando este enfoque probablemente necesitaría una regla adicional para crear subcarpetas dentro de la carpeta de salida? – Justicle
Terminé yendo por esta ruta, ya que necesitaba crear carpetas de compilación específicas de destino y configuración de todos modos, era fácil agregar otro par de carpetas al paso "compilar carpetas". ¡Gracias! – Justicle
Una regla separada para las carpetas de compilación debería funcionar bien. Lo que normalmente hago, solo es agregar una línea "@mkdir -p $ (dir $ @)" al script de comandos para crear el directorio de salida (si no existe) como parte de hacer el archivo de objeto (s). –