makefile - ejecutar - Trabajar con mĂșltiples extensiones de archivos de origen en un archivo MAKE
makefile linux c (1)
No se puede en la marca POSIX estándar. Sin embargo, ya que mencionas vpath asumiré que estás usando GNU make. Si tiene una versión suficientemente nueva (3.81 o posterior), puede hacerlo fácilmente con call y eval:
SRC_EXT = cpp c cc
define compile_rule
%.o : %.$1
$$(COMPILER) $$(FLAGS) $$< $$(INCFLAG)$$(INC)
endef
$(foreach EXT,$(SRC_EXT),$(eval $(call compile_rule,$(EXT))))
Si no tiene una creación de GNU suficientemente nueva, o preferiría una solución alternativa, puede hacer lo mismo con los archivos make creados.
Tengo un proyecto de C ++ con varias extensiones para los archivos fuente (.cpp, .c, .cc) y varias extensiones para los archivos de encabezado (.hpp, .h, .hh). Los archivos de origen están ubicados en un directorio llamado SRC, y los archivos de encabezado están predeciblemente en un directorio llamado INC.
Me gustaría compilar la fuente con una regla como
vpath %.c $(SRC)
%.o: %.c
$(COMPILER) $(FLAGS) $< $(INCFLAG)$(INC)
Por supuesto, esto funciona si sé que el archivo fuente tendrá el formato% .c, pero en el caso de múltiples extensiones de archivo posibles, necesitaría construir una regla similar para% .cpp y% .cc también. Por supuesto, no es gran cosa escribir tres reglas, pero sería bueno poder utilizar este archivo MAKE como arrastrar y soltar para cualquier proyecto, incluso en un idioma diferente, sin tener que volver a escribir las reglas.
Entonces, ¿cómo puedo escribir una regla (u otra construcción que logre el mismo objetivo) que funcione como:
SRC_EXT = cpp c cc
vpath %.$(SRC_EXT) $(SRC)
%.o: %.$(SRC_EXT)
$(COMPILER) $(FLAGS) $< $(INCFLAG)$(INC)
Gracias por tu ayuda.