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
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)
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.
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:
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:
- Leer en todos los archivos MAKE
- Leer en otros archivos MAKE incluidos
- Variables en el archivo de inicialización
- Derivar reglas oscuras y analizar todas las reglas
- Cree cadenas de dependencia de relaciones para todos los archivos de destino
- Según las dependencias, decida qué objetivos regenerar.
- Ejecutar comando de compilación