Hacer | |
---|---|
clase de idioma | herramienta de automatización de compilación [d] , utilidad UNIX [d] ,comandos, lenguajedeprogramacióny lenguaje sangrado [d] |
Apareció en | abril de 1976 |
Autor | Estuardo Feldman |
Dialectos | Marca BSD, marca GNU, marca Microsoft |
influenciado | Hormiga , rastrillo , MSBuild y otros |
sistema operativo | similar a Unix |
make ( IPA [ me ɪ k ] ; del inglés - "make", "make") es una utilidad que automatiza el proceso de conversión de archivos de un formato a otro. La mayoría de las veces, esto consiste en compilar el código fuente en archivos de objetos y luego vincularlos en archivos ejecutables o bibliotecas .
La utilidad utiliza archivos MAKE especiales que especifican las dependencias de los archivos entre sí y las reglas para satisfacerlas. Basándose en la información sobre la hora de la última modificación de cada archivo, make determina y ejecuta los programas necesarios.
Antes de la creación del sistema make build (compilación) , el software de Unix generalmente consistía en scripts de construcción de shell que acompañaban al código fuente de los programas.
make fue creado por Stuart Feldman en abril de 1976 en Bell Labs .
Actualmente existen muchas utilidades para el seguimiento de dependencias, pero make es una de las más utilizadas, principalmente debido a que se encuentra incluido en Unix , comenzando con la versión PWB/UNIX (Eng. Programmer's Workbench ), que contenía herramientas para desarrollar seguridad del software .
Hay varias versiones de make , basadas en el make original o escritas desde cero, que utilizan los mismos formatos de archivo y principios y algoritmos básicos, así como algunas mejoras y extensiones. Por ejemplo:
POSIX incluye un estándar para las características básicas de make , implementado con diversos grados de compatibilidad en varias versiones de make . En general, los archivos MAKE simples pueden procesarse con éxito mediante diferentes versiones de make .
El archivo se busca en el directorio actual. Si no se especifica el modificador -f , se usa el nombre de archivo MAKE predeterminado, Makefile (sin embargo, diferentes implementaciones de MAKE pueden verificar otros archivos además de este, como GNUmakefile ).
make abre el archivo MAKE, lee las reglas y ejecuta los comandos necesarios para construir el objetivo especificado .
Objetivos estándar para crear distribuciones GNU :
De forma predeterminada, make utiliza el primer destino del archivo MAKE.
El proceso de creación de aplicaciones BSD a menudo utiliza:
El programa make ejecuta comandos de acuerdo con las reglas especificadas en un archivo especial. Este archivo se llama makefile. Por lo general, un archivo MAKE describe cómo compilar y vincular un programa.
makefile consta de reglas y variables. Las reglas tienen la siguiente sintaxis:
objetivo1 objetivo2 ... : prop1 prop2 ... equipo1 equipo2 ...La regla es un conjunto de comandos, cuya ejecución conducirá al ensamblaje de archivos de destino a partir de archivos de atributos .
La regla le dice a make que los archivos producidos por los comandos ( objetivos ) dependen de los archivos prop correspondientes. make no verifica ni usa el contenido de los archivos prop de ninguna manera, pero solo se requiere especificar la lista de archivos prop para asegurarse de que los archivos estén presentes antes de comenzar a ejecutar comandos y para realizar un seguimiento de las dependencias de los archivos.
Normalmente, el destino es el nombre del archivo que se genera como resultado de los comandos especificados. El destino también puede ser el nombre de alguna acción que se realizará como resultado de la ejecución de comandos (por ejemplo, el destino limpio en los archivos MAKE para compilar programas generalmente elimina todos los archivos creados durante el proceso de compilación ).
Las líneas de comando deben comenzar con un carácter de tabulación .
Considere un programa simple en C. Deje que el programa consista en un par de archivos de código, main.c y lib.c, así como un archivo de encabezado , defines.h, que se incluye en ambos archivos de código . Por lo tanto, para crear un programa, es necesario crear archivos de objeto main.o y lib.o a partir de pares (main.c defines.h) y (lib.c defines.h), y luego vincularlos al programa. Al construir manualmente, debe ejecutar los siguientes comandos:
cc -c main.c cc -c lib.c cc -o programa main.o lib.oSi se realizan cambios en el archivo defines.h durante el desarrollo del programa, se requerirá la recompilación de ambos archivos y la vinculación , y si cambiamos lib.c, se puede omitir la recompilación de main.c.
Por lo tanto, para cada archivo que necesitamos obtener durante el proceso de compilación , debemos especificar en base a qué archivos y con qué comando se crea. El programa make hace lo siguiente basándose en esta información:
Si no especifica explícitamente un destino cuando ejecuta make , se procesará el primer destino en el archivo MAKE que no comience con '.'.
Para el programa del programa, es suficiente escribir el siguiente archivo MAKE:
programa : principal . sobre lib . o cc -o programa main.o lib.o main.o lib.o : define . hVale la pena señalar una serie de características. El nombre del segundo destino especifica dos archivos y no se especifica ningún comando de compilación para el mismo destino. Además, la dependencia de los archivos objeto de los archivos "*.c" no se especifica explícitamente en ninguna parte. Esto se debe a que el programa make tiene reglas predefinidas para obtener archivos con ciertos . Entonces, para el archivo objeto de destino (extensión “.o”), cuando se encuentre un archivo correspondiente con la extensión “.c”, se llamará al compilador “cc -c”, especificando este archivo “.c” y todos archivos de dependencia en los parámetros.
Sintaxis para definir variables :
variable = valorEl valor puede ser cualquier secuencia de caracteres , incluidos espacios y referencias a los valores de otras variables . Dicho esto, podemos modificar nuestro archivo MAKE de la siguiente manera:
OBJ = main.o lib.o programa : $( OBJ ) cc -o programa $( OBJ ) $(OBJ) : define . hCabe señalar que el cálculo de los valores de las variables ocurre solo en el momento del uso ( se utiliza la llamada evaluación perezosa ). Por ejemplo, la creación de todos los objetivos a partir del siguiente archivo MAKE imprimirá la cadena "¿Eh?".
foo = $( bar ) bar = $( ugh ) ugh = ¿Eh? todos : echo $( foo )Supongamos que se agrega un segundo archivo de encabezado, lib.h, al proyecto y solo se incluye en lib.c. Luego, el archivo MAKE aumentará en una línea más:
lib.o : lib . hPor lo tanto, un archivo de destino se puede especificar para varios propósitos. En este caso, la lista completa de dependencias para el archivo se compilará a partir de las listas de dependencias de todos los objetivos en los que participa, el archivo se creará una sola vez.
Para acelerar las tareas de ejecución prolongada, se utiliza la paralelización de los cálculos dentro del programa make. La paralelización la realiza automáticamente el intérprete de make. Para ejecutar el archivo MAKE en modo de subprocesos múltiples, debe pasar la opción -j <número de subprocesos>.
hacer [ -j <número de subprocesos> ] [ objetivo ]Sistemas de automatización de montaje | |
---|---|