configurar - makefile windows
Makefile, Pattern-Rules y Directories (1)
Quiero escribir un makefile (gmake) para un compilador que, a diferencia de gcc, coloca todos los archivos de salida en un directorio específico. Lamentablemente, este comportamiento no se puede cambiar.
Mis fuentes están en múltiples directorios. ¿Cómo escribo una regla de patrones que me permite compilar las fuentes?
De acuerdo, eso es un poco confuso. Aquí hay un ejemplo. Mi aspecto de fuentes puede gustar esto:
./folder1/foo.c
./folder2/bar.c
y los archivos de salida terminarán así:
./obj/foo.obj
./obj/bar.obj
¿Cómo debería ser mi regla para compilar mis fuentes?
%.obj : %.c
$(COMPILER) -c $<
no trabajará.
¿Algunas ideas? Me gustaría evitar una regla implícita para cada archivo fuente ...
Extraído de algún Makefile mío:
OBJS := $(sort $(patsubst %.cpp,$(OBJECT_DIRECTORY)/%.o,$(patsubst %.c,$(OBJECT_DIRECTORY)/%.o,$(notdir $(SRCS)))))
Donde OBJECT_DIRECTORY
apunta al directorio de objetos y SRCS
es la lista de archivos fuente (que puede llenar incluso usando $(wildcard)
).
Luego en el Makefile, tengo:
define define_compile_rules
$(OBJECT_DIRECTORY)/%.o: $(1)%.c
@echo " + Compiling ''$$<''"
@mkdir -p $$(@D)
$(CC) $$(CFLAGS) -o $$@ -c $$<
endef
$(foreach directory,$(sort $(dir $(SRCS))),$(eval $(call define_compile_rules,$(directory))))
Ver la función $(eval)
.