utilizar make ejecutar configurar como comando makefile design-patterns file-extension rule

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.