Makefile - Recompilación

los makeEl programa es una utilidad inteligente y funciona en función de los cambios que realice en sus archivos fuente. Si tiene cuatro archivos main.cpp, hello.cpp, factorial.cpp y functions.h, entonces todos los archivos restantes dependen de functions.h, y main.cpp depende de hello.cpp y factorial.cpp. Por lo tanto, si realiza cambios en functions.h, entonces elmakevuelve a compilar todos los archivos fuente para generar nuevos archivos objeto. Sin embargo, si realiza algún cambio en main.cpp, ya que no depende de ningún otro archivo, solo se vuelve a compilar el archivo main.cpp, y help.cpp y factorial.cpp no.

Al compilar un archivo, el makecomprueba su archivo de objeto y compara las marcas de tiempo. Si el archivo de origen tiene una marca de tiempo más reciente que el archivo de objeto, genera un nuevo archivo de objeto asumiendo que el archivo de origen ha sido modificado.

Evitar la recompilación

Puede haber un proyecto que consta de miles de archivos. A veces, es posible que haya cambiado un archivo de origen, pero es posible que no desee volver a compilar todos los archivos que dependen de él. Por ejemplo, suponga que agrega una macro o una declaración a un archivo de encabezado, del cual dependen los otros archivos. Siendo conservadormake asume que cualquier cambio en el archivo de encabezado requiere la recompilación de todos los archivos dependientes, pero usted sabe que no necesitan recompilación y prefiere no perder el tiempo esperando a que se compilen.

Si anticipa el problema antes de cambiar el archivo de encabezado, puede usar la bandera `-t '. Esta bandera dicemakeno para ejecutar los comandos en las reglas, sino para marcar el objetivo como actualizado cambiando su fecha de última modificación. Debe seguir este procedimiento:

  • Use el comando 'make' para recompilar los archivos fuente que realmente necesitan recompilación.

  • Realice los cambios en los archivos de encabezado.

  • Utilice el comando 'make -t' para marcar todos los archivos objeto como actualizados. La próxima vez que ejecute make, los cambios en los archivos de encabezado no provocan ninguna recompilación.

Si ya ha cambiado el archivo de encabezado en un momento en el que algunos archivos necesitan recompilarse, es demasiado tarde para hacerlo. En su lugar, puede utilizar la bandera `-o archivo ', que marca un archivo especificado como" antiguo ". Esto significa que el archivo en sí no se rehará y nada más se rehará en su cuenta. debe seguir este procedimiento -

  • Vuelva a compilar los archivos fuente que necesitan compilación por razones independientes del archivo de encabezado particular, con `make -o header file '. Si hay varios archivos de encabezado involucrados, use una opción "-o" separada para cada archivo de encabezado.

  • Actualice todos los archivos de objeto con `make -t '.