es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Makefile mismo objetivo pero dependencias diferentes

Tengo un montón de archivos de Fortran que estoy intentando compilar con un archivo “makefile”, y una parte del archivo “makefile” se ve así:

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.f  | $(OBJ_DIR)
    $(F90) -c -o $@ $< $(FFLAGS) -J $(OBJ_DIR) -I $(OBJ_DIR)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.f90  | $(OBJ_DIR)
    $(F90) -c -o $@ $< $(FFLAGS) -J $(OBJ_DIR) -I $(OBJ_DIR)

$(OBJ_DIR)/%.o: $(SRC_DIR)/%.F90  | $(OBJ_DIR)
    $(F90) -c -o $@ $< $(FFLAGS) -J $(OBJ_DIR) -I $(OBJ_DIR)

Como puedes ver, es bastante repetitivo ya que tengo que compilar *.f, *.f90 y *.F90, pero el comando de compilación es exactamente el mismo para todos ellos. ¿Hay alguna manera de fusionarlos en una sola regla?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes combinar todas esas reglas en una sola regla utilizando la característica incorporada de las reglas de patrón de Makefile. Puedes hacerlo de esta manera:

    $(OBJ_DIR)/%.o: $(SRC_DIR)/%.f
    $(OBJ_DIR)/%.o: $(SRC_DIR)/%.f90
    $(OBJ_DIR)/%.o: $(SRC_DIR)/%.F90
    $(F90) -c -o $@ $< $(FFLAGS) -J $(OBJ_DIR) -I $(OBJ_DIR)
    

    De esta forma, estás definiendo una única regla de patrón que se aplica a los tres tipos de archivo, y dado que todos tienen el mismo comando de compilación, puedes colocarlo fuera de la línea de objetivos y pre-requisitos. Esto hará que tu código sea más corto y legible.

Comments are closed.