Leí algunos tutoriales sobre Makefiles, pero para mí todavía no está claro qué significa el objetivo "todos" y qué hace.
¿Algunas ideas?
Una compilación, como la entiende Makefile, consta de muchos objetivos. Por ejemplo, para construir un proyecto es posible que necesite
Si implementó este flujo de trabajo con makefile, podría crear cada uno de los destinos por separado. Por ejemplo, si escribiste
make file1.o
solo crearía ese archivo, si fuera necesario.
El nombre de all
no es fijo. Es solo un nombre convencional; all
target denota que si lo invoca, make construirá todo lo que se necesita para hacer una construcción completa . Este suele ser un objetivo ficticio, que no crea ningún archivo, sino que simplemente depende de los otros archivos. Para el ejemplo anterior, compilar todo lo necesario es compilar ejecutables, y los otros archivos se extraen como dependencias. Entonces, en el archivo MAKE se ve así:
all: executable1 executable2
all
target suele ser el primero en el archivo MAKE, ya que si solo escribe make
en la línea de comandos, sin especificar el objetivo, construirá el primer objetivo. Y esperas que así sea all
.
all
también suele ser un .PHONY
objetivo. Obtenga más información aquí .
El manual de GNU Make da una definición clara all
en su lista de objetivos estándar .
Si el autor del Makefile sigue esa convención, el destino all
debería:
make
debería hacer lo mismo que make all
.Lograr 1 all
se define típicamente como un .PHONY
objetivo que depende de los ejecutables que forman el programa completo:
.PHONY : all
all : executable
Para lograr 2, all
debe ser el primer objetivo definido en el archivo make o asignarse como objetivo predeterminado:
.DEFAULT_GOAL := all
No estoy seguro de que represente algo especial. Es solo una convención que proporciona una regla 'todos', y generalmente se usa para enumerar todos los objetivos secundarios necesarios para construir el proyecto completo, de ahí el nombre 'todos'. Lo único especial acerca de esto es que muchas veces la gente lo colocará como el primer objetivo en el archivo MAKE, lo que significa que solo escribir 'make' hará lo mismo que 'make all'.
El objetivo "todos" es un ejemplo de un objetivo ficticio: no hay nada en el disco llamado "todos". Esto significa que cuando haces un "make all", make siempre piensa que necesita construirlo, y por eso ejecuta todos los comandos para ese objetivo. Por lo general, esos comandos serán los que compilen todos los productos finales que conoce el archivo MAKE, pero podrían hacer cualquier cosa.
Otros ejemplos de objetivos ficticios son "limpiar" e "instalar", y funcionan de la misma manera.
Si aún no lo ha leído, debería leer el GNU Make Manual , que también es un excelente tutorial.