He leído algunos tutoriales sobre Makefiles, pero para mí todavía no está claro para qué es el objetivo "todo" y lo que hace.¿Qué significa "todo" en un archivo MAKE?
¿Alguna idea?
He leído algunos tutoriales sobre Makefiles, pero para mí todavía no está claro para qué es el objetivo "todo" y lo que hace.¿Qué significa "todo" en un archivo MAKE?
¿Alguna idea?
Una compilación, como lo entiende Makefile, consiste en una gran cantidad de objetivos. Por ejemplo, para construir un proyecto que pueda necesitar
Si implementa este flujo de trabajo con el makefile, que podrían hacer que cada uno de los objetivos separatel y Por ejemplo, si escribió
make file1.o
, solo compilaría ese archivo, si fuese necesario.
El nombre de all
no es fijo. Es solo un nombre convencional; all
target denota que si lo invoca, make compilará todos 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 es construir compilables, los demás archivos se extraen como dependencias. Así que en el makefile que tiene este aspecto:
all: executable1 executable2
all
objetivo suele ser el primero en el makefile, ya que si se acaba de escribir make
en línea de comandos, sin especificar el destino, se va a construir el primer objetivo. Y espera que sea all
.
all
suele ser también un objetivo .PHONY
. Conozca más here.
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'.
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", 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 "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.
El manual de GNU Make da una definición clara para all
en su list of standard targets.
Si el autor del Makefile está siguiendo la convención de que entonces el objetivo all
debe:
make
debería hacer lo mismo que make all
.Para lograr 1 all
se define típicamente como un objetivo .PHONY
que depende del ejecutable (s) que forman la totalidad del programa:
.PHONY : all
all : executable
Para lograr 2 all
o bien debe ser el primer objetivo se define en el archivo make o se le asignará como el objetivo predeterminado:
.DEFAULT_GOAL := all
Y no se olvide de Mr.Proper (incidentalmente mrproper) y distclean ... – t0mm13b