¿Qué significa "todo" en un archivo MAKE?

105

Leí algunos tutoriales sobre Makefiles, pero para mí todavía no está claro qué significa el objetivo "todos" y qué hace.

¿Algunas ideas?

Chris Smullian
fuente

Respuestas:

116

Una compilación, como la entiende Makefile, consta de muchos objetivos. Por ejemplo, para construir un proyecto es posible que necesite

  1. Construir file1.o a partir de file1.c
  2. Construir file2.o a partir de file2.c
  3. Construir file3.o a partir de file3.c
  4. Construya el ejecutable1 a partir de file1.o y file3.o
  5. Construir ejecutable2 a partir de file2.o

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 allno es fijo. Es solo un nombre convencional; alltarget 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

alltarget suele ser el primero en el archivo MAKE, ya que si solo escribe makeen la línea de comandos, sin especificar el objetivo, construirá el primer objetivo. Y esperas que así sea all.

alltambién suele ser un .PHONYobjetivo. Obtenga más información aquí .

P Shved
fuente
31

El manual de GNU Make da una definición clara allen su lista de objetivos estándar .

Si el autor del Makefile sigue esa convención, el destino alldebería:

  1. Compile todo el programa, pero no compile la documentación.
  2. Sea el objetivo predeterminado. Como en ejecución, solo makedebería hacer lo mismo que make all.

Lograr 1 allse define típicamente como un .PHONYobjetivo que depende de los ejecutables que forman el programa completo:

.PHONY : all
all : executable

Para lograr 2, alldebe ser el primer objetivo definido en el archivo make o asignarse como objetivo predeterminado:

.DEFAULT_GOAL := all
PeterSW
fuente
3

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'.

JustJeff
fuente
2

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.


fuente