configurar - ¿Qué significa "todo" en un makefile?
makefile windows (4)
Leí algunos tutoriales sobre Makefiles, pero para mí todavía no está claro qué significa el objetivo "todos" y qué hace.
¿Algunas ideas?
El manual de GNU Make ofrece una definición clara para all
en su lista de objetivos estándar .
Si el autor del Makefile está siguiendo esa convención, entonces el objetivo debería ser:
- Compila todo el programa, pero no compila la documentación.
- Sea el objetivo predeterminado. Al igual que en ejecutar solo
make
debería hacer lo mismo quemake all
.
Para lograr 1, all
se define típicamente como un objetivo .PHONY
que depende de los ejecutables que forman el programa completo:
.PHONY : all
all : executable
Para lograr 2, all
deben ser el primer objetivo definido en el archivo make o asignarse como el objetivo predeterminado:
.DEFAULT_GOAL := all
El objetivo "todo" es un ejemplo de un objetivo ficticio: no hay nada en el disco llamado "todo". Esto significa que cuando haces un "make all", siempre cree que necesita construirlo, y así ejecuta todos los comandos para ese objetivo. Esos comandos generalmente serán los que construirán todos los productos finales que el archivo MAKE conoce, pero podrían hacer cualquier cosa.
Otros ejemplos de objetivos ficticios son "limpio" e "instalar", y funcionan de la misma manera.
Si aún no lo ha leído, debe leer el Manual de GNU Make , que también es un excelente tutorial.
No estoy seguro de que represente algo especial. Es solo una convención que usted proporciona una regla de ''todos'', y generalmente se usa para enumerar todos los objetivos secundarios necesarios para construir todo el proyecto, de ahí el nombre ''todos''. Lo único especial es que muchas veces la gente lo ubicará como el primer objetivo en el archivo MAKE, lo que significa que escribir ''make'' solo hará lo mismo que ''make all''.
Una compilación, como lo entiende Makefile, consiste en una gran cantidad de objetivos. Por ejemplo, para construir un proyecto que podría necesitar
- Crear archivo1.o fuera de archivo1.c
- Crear archivo2.o fuera de archivo2.c
- Crear archivo3.o fuera de archivo3.c
- Compila ejecutable1 de file1.o y file3.o
- Crear ejecutable2 fuera de file2.o
Si implementó este flujo de trabajo con archivo MAKE, puede hacer cada uno de los objetivos por separado. Por ejemplo, si escribiste
make file1.o
solo construiría ese archivo, si es necesario.
El nombre de all
no es fijo. Es solo un nombre convencional; all
objetivos denotan que si lo invocas, make compilará todo lo que se necesita para hacer una compilación completa . Suele ser un objetivo ficticio, que no crea ningún archivo, sino que simplemente depende de los otros archivos. Para el ejemplo anterior, construir todo lo necesario es construir ejecutables, los otros archivos se extraen como dependencias. Entonces, en el archivo MAKE se ve así:
all: executable1 executable2
all
destinos son los primeros en el archivo MAKE, ya que si solo se escribe make
en la línea de comandos, sin especificar el objetivo, se generará el primer objetivo. Y esperas que sea all
.
all
es generalmente también un objetivo .PHONY
. Obtenga más información here .