Linux: makefile

Que es makefile

Makefile : Makefile es una herramienta de compilación automática para archivos fuente en Linux. Los archivos fuente de un proyecto no se cuentan. Se colocan en varios directorios según el tipo, la función y el módulo. Makefile define una serie de reglas para especificar qué archivos Necesita compilar primero, qué archivos deben compilarse más tarde, qué archivos deben recompilarse o incluso operaciones funcionales más complejas. Makefile es como un script de shell, que también puede ejecutar comandos del sistema operativo

make : make es una herramienta de comando que interpreta las instrucciones en el archivo make. La ventaja del archivo make es la "compilación automática". Una vez escrito, solo se necesita un comando make y todo el proyecto se compila completamente automáticamente. Mejorar la eficiencia del desarrollo de software.

makefile

Cuando se ejecuta el comando make, se necesita un archivo makefile para decirle al comando make cómo compilar y vincular el programa. El nombre del archivo debe ser "Makefile" o "makefile" o "GNUmakefile". Si se utilizan otros nombres, debe utilizar Hacer comando -f o -file parámetro para especificar, como "make -f MakeLinux"

La mayoría de make admite los nombres de archivo predeterminados de "makefile" y "Makefile", por lo que es mejor usarlos como nombre de archivo

Reglas de escritura de Makefile :

target:prerequisites
	command

destino es el archivo objeto que se va a generar (Archivo Objeto), también puede ser un archivo ejecutable o una etiqueta

Los requisitos previos son generar el archivo de destino de las condiciones previas necesarias

Commnd es el comando (comando de Shell) requerido para generar el objetivo según los requisitos previos

Nota: Use Tab para sangrar antes de commnd
Inserte la descripción de la imagen aquí

Esta es una dependencia de archivo, es decir, uno o más archivos de destino del destino dependen de los archivos en los requisitos previos, y las reglas de generación se definen en el comando

En el archivo MAKE, el orden en el que se escriben las reglas es muy importante. Debe haber un objetivo final en el archivo MAKE, y todos los demás objetivos están vinculados por este objetivo. Hágale saber su objetivo final. El objetivo de la primera regla del archivo MAKE se establecerá como objetivo final . Si hay muchos goles en la primera regla, entonces el primer gol se convertirá en el objetivo final. Lo que logra es este objetivo

Por ejemplo, la siguiente imagen: (principal es el objetivo final)
Inserte la descripción de la imagen aquí

Usar variables

Las variables son tipos de datos que utilizan los sistemas informáticos para almacenar los valores de las variables. Podemos extraer directamente el valor de la variable correspondiente a través del nombre de la variable. Consiste en reemplazar algunas configuraciones o una cadena de datos reservados con un conjunto de palabras o símbolos, etc.

Inserte la descripción de la imagen aquí
Cómo utilizar variables:

  • Definición: Use = para definir
  • Utilizar: $ (nombre de variable)

Por ejemplo: hay 5 archivos .o en el ejemplo anterior, que se pueden definir de la siguiente manera

file=my_add.o my_sub.o my_mux.o\
	 my_div.o main.o

La barra invertida \ es el significado del carácter de nueva línea. Para usar estos archivos 5 .o en el futuro, simplemente use $ (archivo)

Para otras introducciones de variables y variables de entorno, consulte mi blog anterior: Linux: Introducción a Shell, BASH y Shell Script

Búsqueda de documentos

En algunos proyectos grandes, hay una gran cantidad de archivos fuente, nuestra práctica habitual es clasificar estos muchos archivos fuente y almacenarlos en diferentes directorios. Entonces, cuando make necesita encontrar las dependencias de los archivos, puede agregar una ruta delante del archivo, pero la mejor manera es decirle make a path y dejar que make la encuentre automáticamente.

La variable especial VPATH en makefile implementa esta función. Si no se especifica esta variable, make solo buscará archivos dependientes y archivos de destino en el directorio actual. Si esta variable está definida, make buscará archivos en el directorio especificado si no se puede encontrar el directorio actual

Reglas de uso de VPATH :

VPATH=path1:path2

Se especifican dos rutas arriba, separadas por dos puntos:

También puede utilizar la palabra clave vpath de make para establecer la ruta de búsqueda del archivo. Vapth es todo en minúsculas, que es diferente de VPATH, que es una palabra clave y VPATH es una variable.

Reglas de uso de Vpath :

vpath <pattern> <directories>  #为符合模式<pattern>的文件指定搜索路径<directories>

vpath<pattern>  #清除符合模式<pattern>的文件的搜索目录

vpath  #清除所有已被设置好了的文件搜索目录

Ejemplo: vpath% .c path1 indica que el directorio de búsqueda del archivo .c especificado es path1,% indica que cero o varios caracteres coinciden

Reglas oscuras

La marca de GNU es muy poderosa. Puede derivar automáticamente los comandos detrás de los archivos y las dependencias de los archivos, por lo que no necesitamos escribir comandos similares después de cada archivo .o, porque nuestra marca lo reconocerá automáticamente y lo usará por sí mismo. Derivar el comando

Siempre que make vea un archivo .o, agregará automáticamente el archivo .c a la dependencia. Si make encuentra un archivo .o, entonces lo que sea.c será un archivo de dependencia de lo que sea.o. Y gcc -c lo que sea.c también se deducirá, estas son las reglas oscuras de make

De acuerdo con las reglas y variables oscuras, el primer ejemplo se puede simplificar, como se muestra en la siguiente figura:
Inserte la descripción de la imagen aquí

Referencia a otros archivos MAKE

Utilice la palabra clave include en el archivo maikefile para incluir otros archivos MAKE, y los archivos incluidos se colocarán en la ubicación de inclusión del archivo actual tal como están

incluir sintaxis:

include file1 file2 file3  

El archivo puede ser el formato de archivo del Shell del sistema operativo actual, puede incluir rutas y comodines, o usar variables

Objetivo falso

El objetivo en las reglas de escritura del archivo MAKE también puede ser un pseudodirectorio, como un comando clear

clean:
	rm *.o 

Después de ejecutar el comando rm * .o, no se generará un archivo limpio. Limpiar es solo una etiqueta, que se llama vívidamente un pseudo objetivo

Puede utilizar .PHONY para indicar explícitamente que un objetivo es un pseudo objetivo

.PHONY:clean
clean:
	rm *.o

Nota : Cada archivo MAKE debe escribir un comando para borrar los archivos de objeto (.o y archivos de ejecución) con el fin de recompilar y mantener limpios los archivos. La regla no escrita es: "limpio siempre se coloca al final del archivo ", make considerará el primer destino que aparece en el archivo MAKE como el destino predeterminado. Otros no se ejecutarán a menos que sea necesario para generar el destino predeterminado . Por lo tanto, la limpieza no se ejecutará durante la creación. Para ejecutar el comando de limpieza, utilice manualmente el comando make clean para eliminar el archivo * .o

Hacer proceso de ejecución de obra

Los siguientes pasos se ejecutan cuando GNU make funciona:

  1. Leer en todos los archivos MAKE
  2. Leer en otros archivos MAKE incluidos
  3. Variables en el archivo de inicialización
  4. Derivar reglas oscuras y analizar todas las reglas
  5. Cree cadenas de dependencia de relaciones para todos los archivos de destino
  6. Según las dependencias, decida qué objetivos regenerar.
  7. Ejecutar comando de compilación

Supongo que te gusta

Origin blog.csdn.net/huifaguangdemao/article/details/108502511
Recomendado
Clasificación