Un makefile que describe cómo recompilar un programa puede usarse de muchas maneras. El uso más sencillo es recompilar todos los archivos que están desactualizados (que necesitan actualizarse). La mayoría de los makefiles se escriben de modo que, al ejecutar make sin argumentos, se haga justamente eso.
Sin embargo, puede que solo quiera actualizar algunos archivos; o quizá quiera usar un compilador distinto u opciones de compilación distintas; o tal vez solo quiera averiguar qué archivos están desactualizados sin modificarlos.
Al dar argumentos cuando ejecuta make, puede conseguir todo esto y muchas otras cosas.
El estado de salida de make siempre es uno de estos tres valores:
0El estado de salida es cero si make finaliza con éxito.
2El estado de salida es dos si make encuentra algún error. En tal caso, se muestran mensajes que describen cada error.
1El estado de salida es uno si usa el indicador ‘-q’ y make determina que algún objetivo todavía no está actualizado. Consulte En lugar de ejecutar las recetas.
La forma de especificar el nombre del makefile es con la opción ‘-f’ o ‘--file’ (‘--makefile’ también funciona). Por ejemplo, ‘-f altmake’ indica que se use el archivo altmake como makefile.
Si usa el indicador ‘-f’ varias veces y hace seguir a cada ‘-f’ un argumento, todos los archivos especificados se usan conjuntamente como makefiles.
Si no usa el indicador ‘-f’ ni ‘--file’, de forma predeterminada se prueban GNUmakefile, makefile y Makefile, en ese orden, y se usa el primero de estos tres que exista o que se pueda generar (consulte Cómo escribir makefiles).
Las metas son los objetivos que make debe esforzarse por actualizar en última instancia. Los demás objetivos también se actualizan si aparecen como prerrequisitos (prerequisites) de las metas, o como prerrequisitos de los prerrequisitos de las metas, y así sucesivamente.
De forma predeterminada, la meta es el primer objetivo del makefile (sin contar los objetivos cuyo nombre comienza con un punto). Por eso, los makefiles suelen escribirse de modo que el primer objetivo sirva para compilar el programa completo (o los programas) que describen. Si la primera regla del makefile tiene varios objetivos, solo el primer objetivo de la regla se convierte en la meta predeterminada, no la lista entera. Puede gestionar la selección de la meta predeterminada desde su propio makefile mediante la variable .DEFAULT_GOAL (consulte Otras variables especiales).
También puede especificar otra meta u otras metas mediante argumentos en la línea de órdenes de make. Indique el nombre de la meta como argumento. Si especifica varias metas, make las procesa una a una, en el orden en que las nombre.
Cualquier objetivo del makefile puede especificarse como meta (salvo que comience con ‘-’ o contenga un ‘=’, en cuyo caso se interpretará como una opción o como una definición de variable, respectivamente). Incluso pueden especificarse objetivos que no estén en el makefile, si make puede encontrar reglas implícitas que indiquen cómo construirlos.
make establece la variable especial MAKECMDGOALS con la lista de metas que haya especificado en la línea de órdenes. Si no se indicó ninguna meta en la línea de órdenes, esta variable queda vacía. Tenga en cuenta que esta variable solo debería usarse en circunstancias especiales.
Un ejemplo de uso apropiado es evitar incluir los archivos .d durante la ejecución de la regla clean (consulte Generar prerrequisitos automáticamente). Así se evita que make los cree solo para borrarlos de inmediato:
sources = foo.c bar.c ifeq (,$(filter clean,$(MAKECMDGOALS)) include $(sources:.c=.d) endif
Un uso de especificar una meta es cuando solo quiere compilar una parte del programa, o solo uno de varios programas. Indique como meta cada archivo que desee rehacer. Por ejemplo, imagine un directorio que contiene varios programas, con un makefile que comienza así:
.PHONY: all all: size nm ld ar as
Si está trabajando en el programa size, puede teclear ‘make size’ para que solo se recompilen los archivos de ese programa.
Otro uso de especificar una meta es construir archivos que normalmente no se construyen. Por ejemplo, puede haber un archivo de salida de depuración, o una versión del programa compilada de forma especial para hacer pruebas, que tenga una regla en el makefile pero que no sea prerrequisito de la meta predeterminada.
Otro uso más de especificar una meta es ejecutar la receta (recipe) asociada a un objetivo ficticio (phony) (consulte Objetivos ficticios (phony)) o a un objetivo vacío (consulte Archivos de objetivo vacíos para registrar eventos). Muchos makefiles contienen un objetivo ficticio llamado clean que borra todo excepto los archivos fuente. Naturalmente, esto solo se hace si lo solicita de forma explícita con ‘make clean’. A continuación se ofrece una lista de nombres típicos de objetivos ficticios y vacíos. Consulte Objetivos estándar para los usuarios para ver una lista detallada de todos los nombres de objetivo estándar que usan los paquetes de software de GNU.
Construye todos los objetivos de nivel superior que el makefile conoce.
Borra todos los archivos que normalmente se crean al ejecutar make.
Similar a ‘clean’, pero puede abstenerse de borrar algunos archivos que normalmente no se desea recompilar. Por ejemplo, el objetivo ‘mostlyclean’ de GCC no borra libgcc.a, porque rara vez es necesario recompilarlo y lleva mucho tiempo.
Cualquiera de estos objetivos podría definirse para borrar más archivos que ‘clean’. Por ejemplo, podría borrar los archivos de configuración o los enlaces que normalmente crea como preparación para la compilación, incluso si el propio makefile no puede crear esos archivos.
Copia el archivo ejecutable en un directorio donde los usuarios suelen buscar las órdenes; copia los archivos auxiliares que use el ejecutable en los directorios donde los buscará.
Imprime un listado de los archivos fuente que han cambiado.
Crea un archivo tar con los archivos fuente.
Crea un archivo de shell (archivo shar) con los archivos fuente.
Crea un archivo de distribución con los archivos fuente. Puede ser un archivo tar, un archivo shar, una versión comprimida de alguno de los anteriores, o incluso varios de los anteriores.
Actualiza una tabla de etiquetas (tags) para este programa.
Realiza autopruebas sobre el programa que construye este makefile.
El makefile le dice a make cómo determinar si un objetivo está actualizado y cómo actualizar cada objetivo. Pero actualizar los objetivos no siempre es lo que se desea. Ciertas opciones indican a make que realice otras actividades.
«No-op» (sin operación). Hace que make muestre las recetas necesarias para poner los objetivos al día, pero sin ejecutarlas realmente. Tenga en cuenta que, aun con este indicador, algunas recetas se ejecutan igualmente (consulte Cómo funciona la variable MAKE). Asimismo, también se ejecutan las recetas necesarias para actualizar los makefiles incluidos (consulte Cómo se rehacen los makefiles).
«Touch» (tocar). Marca los objetivos como actualizados sin cambiarlos realmente. Dicho de otro modo, make finge actualizar los objetivos, pero en realidad no cambia su contenido; solo se actualiza su hora de modificación.
«Question» (pregunta). Comprueba en silencio si los objetivos están actualizados, pero no ejecuta las recetas; el código de salida indica si se necesita alguna actualización.
«What if» (qué pasaría si). Cada indicador ‘-W’ va seguido de un nombre de archivo. make registra la hora de modificación de los archivos indicados como si fuera la hora actual, aunque sus horas de modificación reales permanezcan iguales. Puede usar el indicador ‘-W’ junto con el indicador ‘-n’ para ver qué ocurriría si modificara ciertos archivos.
Con el indicador ‘-n’, make muestra la receta que normalmente ejecutaría, pero por lo general no la ejecuta.
Con el indicador ‘-t’, make ignora las recetas de las reglas y usa (en la práctica) la orden touch para cada objetivo que necesite rehacerse. La orden touch también se muestra, salvo que se use ‘-s’ o .SILENT. Por rapidez, make no invoca realmente el programa touch: hace el trabajo directamente.
Con el indicador ‘-q’, make no muestra nada y no ejecuta ninguna receta, pero el código de estado de salida que devuelve es cero si y solo si los objetivos considerados ya están actualizados. Si el estado de salida es uno, es que hace falta alguna actualización. Si make encuentra un error, el estado de salida es dos, de modo que puede distinguir un error de un objetivo que no está actualizado.
Es un error usar más de uno de estos tres indicadores en la misma invocación de make.
Las opciones ‘-n’, ‘-t’ y ‘-q’ no afectan a las líneas de receta que comienzan con el carácter ‘+’ ni a las que contienen las cadenas ‘$(MAKE)’ o ‘${MAKE}’. Tenga en cuenta que, con independencia de estas opciones, solo se ejecuta la línea que contiene el carácter ‘+’ o las cadenas ‘$(MAKE)’ o ‘${MAKE}’. Las demás líneas de la misma regla no se ejecutan salvo que ellas también comiencen con ‘+’ o contengan ‘$(MAKE)’ o ‘${MAKE}’ (consulte Cómo funciona la variable MAKE).
El indicador ‘-t’ impide que se actualicen los objetivos ficticios (phony) (consulte Objetivos ficticios (phony)), salvo que haya líneas de receta que comiencen con ‘+’ o que contengan ‘$(MAKE)’ o ‘${MAKE}’.
El indicador ‘-W’ ofrece dos funciones:
make si modificara ciertos archivos.
make está ejecutando realmente las recetas, el indicador ‘-W’ puede hacer que make actúe como si algunos archivos se hubieran modificado, sin ejecutar realmente las recetas correspondientes a esos archivos.
Tenga en cuenta que las opciones ‘-p’ y ‘-v’ le permiten obtener otra información sobre make o sobre los makefiles en uso (consulte Resumen de opciones).
A veces puede haber cambiado un archivo fuente pero no querer recompilar todos los archivos que dependen de él. Por ejemplo, suponga que añade una macro o una declaración a un archivo de cabecera del que dependen muchos otros archivos. Por prudencia, make supone que cualquier cambio en el archivo de cabecera obliga a recompilar todos los archivos dependientes, pero usted sabe que no es necesario recompilarlos y preferiría no perder el tiempo esperando a que se compilen.
Si prevé el problema antes de cambiar el archivo de cabecera, puede usar el indicador ‘-t’. Este indicador le dice a make que no ejecute las recetas de las reglas, sino que marque el objetivo como actualizado cambiando su fecha de última modificación. Siga este procedimiento:
make, los cambios en los archivos de cabecera no provocarán ninguna recompilación.
Si ya ha cambiado el archivo de cabecera en un momento en que algunos archivos sí necesitan recompilación, es demasiado tarde para hacer esto. En tal caso, puede usar el indicador ‘-o file’, que marca el archivo indicado como «viejo» (old) (consulte Resumen de opciones). Esto significa que el propio archivo no se rehará, y que tampoco se rehará nada más por su causa. Siga este procedimiento:
Un argumento que contiene ‘=’ especifica el valor de una variable: ‘v=x’ establece el valor de la variable v a x. Si especifica un valor de este modo, se ignoran todas las asignaciones ordinarias de esa misma variable en el makefile; se dice que han sido anuladas (overridden) por el argumento de la línea de órdenes.
La forma más habitual de usar esta posibilidad es pasar indicadores adicionales a los compiladores. Por ejemplo, en un makefile bien escrito, la variable CFLAGS se incluye en cada receta que ejecuta el compilador de C, de modo que un archivo foo.c se compilaría más o menos así:
cc -c $(CFLAGS) foo.c
Por tanto, cualquier valor que asigne a CFLAGS afecta a cada compilación que se realice. El makefile probablemente especifique el valor habitual de CFLAGS, así:
CFLAGS=-g
Cada vez que ejecute make, puede anular este valor si lo desea. Por ejemplo, si escribe ‘make CFLAGS='-g -O'’, cada compilación de C se hará con ‘cc -c -g -O’. (Esto también ilustra cómo puede usar el entrecomillado del shell para encerrar espacios y otros caracteres especiales en el valor de una variable cuando la anula.)
La variable CFLAGS es solo una de las muchas variables estándar que existen precisamente para que pueda cambiarlas de este modo. Consulte Variables que usan las reglas implícitas para ver una lista completa.
También puede programar el makefile para que consulte variables adicionales propias, dando al usuario la posibilidad de controlar otros aspectos del funcionamiento del makefile cambiando las variables.
Cuando anula una variable con un argumento de la línea de órdenes, puede definir una variable de expansión recursiva o una variable de expansión simple. Los ejemplos mostrados arriba crean una variable de expansión recursiva; para crear una variable de expansión simple, escriba ‘:=’ o ‘::=’ en lugar de ‘=’. No obstante, salvo que quiera incluir una referencia a una variable o una llamada a una función en el valor que especifica, da igual qué tipo de variable cree.
Hay una manera en la que el makefile puede cambiar una variable que usted ha anulado: usar la directiva (directive) override, que es una línea con este aspecto: ‘override variable = value’ (consulte La directiva override).
Normalmente, cuando se produce un error al ejecutar una orden del shell, make se rinde de inmediato y devuelve un estado distinto de cero. A partir de ese momento no se ejecuta ninguna receta para ningún objetivo. El error implica que la meta no puede rehacerse correctamente, y make lo informa en cuanto lo sabe.
Sin embargo, cuando está compilando un programa que acaba de cambiar, esto no es lo que se desea. Más bien preferiría que make intentara compilar todos los archivos que pueda, para mostrarle tantos errores de compilación como sea posible.
En esos casos, debería usar el indicador ‘-k’ o ‘--keep-going’. Este indica a make que siga considerando los demás prerrequisitos de los objetivos pendientes, rehaciéndolos si es necesario, antes de rendirse y devolver un estado distinto de cero. Por ejemplo, tras un error al compilar un archivo objeto, ‘make -k’ seguirá compilando otros archivos objeto aunque ya sepa que será imposible enlazarlos. Además de continuar tras órdenes del shell fallidas, ‘make -k’ continuará en la medida de lo posible tras descubrir que no sabe cómo construir un objetivo o un archivo de prerrequisito. Esto siempre provocará un mensaje de error, pero sin ‘-k’ sería un error fatal (consulte Resumen de opciones).
El comportamiento habitual de make supone que su propósito es poner las metas al día; en cuanto make averigua que esto es imposible, lo mejor es informar del fallo de inmediato. El indicador ‘-k’ indica que el verdadero propósito es probar tanto como sea posible de los cambios hechos en el programa, quizá para encontrar varios problemas independientes y poder corregirlos todos antes del siguiente intento de compilación. Por eso la orden M-x compile de Emacs pasa el indicador ‘-k’ de forma predeterminada.
En algunas situaciones, make necesitará crear sus propios archivos temporales. Estos archivos no deben alterarse mientras make se esté ejecutando, incluidas todas las instancias de make invocadas recursivamente.
Si la variable de entorno MAKE_TMPDIR está definida, todos los archivos temporales que cree make se colocarán allí.
Si MAKE_TMPDIR no está definida, se usará la ubicación estándar de archivos temporales del sistema operativo actual. En los sistemas POSIX, esta será la ubicación indicada en la variable de entorno TMPDIR, o bien la ubicación predeterminada del sistema (por ejemplo, /tmp). En Windows, primero se comprueba TMP, luego TEMP, después TMPDIR y, por último, se usa la ubicación predeterminada de archivos temporales del sistema.
Tenga en cuenta que este directorio ya debe existir o make fallará: make no intentará crearlo.
Estas variables no pueden definirse desde dentro de un makefile: GNU make debe poder acceder a esta ubicación antes de empezar a leer los makefiles.
A continuación se presenta una tabla con todas las opciones que make entiende:
Estas opciones se ignoran por compatibilidad con otras versiones de make.
Considera desactualizados todos los objetivos. GNU make procede a considerar los objetivos y sus prerrequisitos con los algoritmos normales; sin embargo, todos los objetivos así considerados se rehacen siempre, sea cual sea el estado de sus prerrequisitos. Para evitar la recursión infinita, si MAKE_RESTARTS (consulte Otras variables especiales) tiene un valor mayor que 0, esta opción se desactiva al considerar si deben rehacerse los makefiles (consulte Cómo se rehacen los makefiles).
Cambia al directorio dir antes de leer los makefiles. Si se especifican varias opciones ‘-C’, cada una se interpreta relativa a la anterior: ‘-C / -C etc’ equivale a ‘-C /etc’. Esto se usa habitualmente con invocaciones recursivas de make (consulte Uso recursivo de make).
Muestra información de depuración además del procesamiento normal. La información de depuración indica qué archivos se están considerando para rehacerlos, qué horas de archivo se están comparando y con qué resultados, qué archivos necesitan rehacerse realmente, qué reglas implícitas se consideran y cuáles se aplican: todo lo interesante sobre cómo decide make qué hacer. La opción -d equivale a ‘--debug=a’ (véase más abajo).
Muestra información de depuración además del procesamiento normal. Pueden elegirse distintos niveles y tipos de salida. Sin argumentos, muestra el nivel «basic» (básico) de depuración. Los argumentos posibles son los siguientes; solo se considera el primer carácter, y los valores deben separarse con comas o espacios.
a (all)Habilita todos los tipos de salida de depuración. Equivale a usar ‘-d’.
b (basic)Depuración básica. Muestra cada objetivo que se determinó que estaba desactualizado y si la construcción tuvo éxito o no.
v (verbose)Un nivel por encima de ‘basic’; incluye mensajes sobre qué makefiles se analizaron, qué prerrequisitos no necesitaban reconstruirse, etc. Esta opción también habilita los mensajes de ‘basic’.
i (implicit)Muestra mensajes que describen la búsqueda de reglas implícitas para cada objetivo. Esta opción también habilita los mensajes de ‘basic’.
j (jobs)Muestra mensajes con detalles sobre la invocación de subórdenes concretas.
m (makefile)De forma predeterminada, los mensajes anteriores no se habilitan mientras se intenta rehacer los makefiles. Esta opción habilita los mensajes también durante la reconstrucción de los makefiles. Tenga en cuenta que la opción ‘all’ sí habilita esta opción. Esta opción también habilita los mensajes de ‘basic’.
p (print)Muestra la receta que se va a ejecutar, incluso cuando la receta es normalmente silenciosa (debido a .SILENT o a ‘@’). También muestra el nombre del makefile y el número de línea donde se definió la receta.
w (why)Explica por qué debe rehacerse cada objetivo, mostrando qué prerrequisitos están más actualizados que el objetivo.
n (none)Desactiva toda la depuración actualmente habilitada. Si después de esto aparecen indicadores de depuración adicionales, estos seguirán surtiendo efecto.
Da prioridad a las variables tomadas del entorno sobre las variables de los makefiles. Consulte Variables del entorno.
Evalúa string como sintaxis de makefile. Es una versión en línea de órdenes de la función eval (consulte La función eval). La evaluación se realiza después de que se hayan definido las reglas y variables predeterminadas, pero antes de que se lea ningún makefile.
Lee el archivo llamado file como makefile. Consulte Cómo escribir makefiles.
Le recuerda las opciones que make entiende y, a continuación, termina.
Ignora todos los errores de las recetas que se ejecutan para rehacer archivos. Consulte Errores en las recetas.
Especifica un directorio dir donde buscar los makefiles incluidos. Consulte Incluir otros makefiles. Si se usan varias opciones ‘-I’ para especificar varios directorios, estos se buscan en el orden indicado. Si el directorio dir es un único guion (-), se descartan todos los directorios ya especificados hasta ese punto (incluidas las rutas de directorios predeterminadas). Puede examinar la lista actual de directorios que se van a buscar mediante la variable .INCLUDE_DIRS.
Especifica el número de recetas (tareas, jobs) que se ejecutarán de forma simultánea. Sin argumento, make ejecuta tantas recetas a la vez como sea posible. Si hay más de una opción ‘-j’, surte efecto la última. Consulte Ejecución en paralelo para más información sobre cómo se ejecutan las recetas. Tenga en cuenta que esta opción se ignora en MS-DOS.
Elige el estilo de jobserver que se va a usar. Esta opción solo surte efecto si las construcciones en paralelo están habilitadas (consulte Ejecución en paralelo). En los sistemas POSIX, style puede ser fifo (el predeterminado) o pipe. En Windows, el único style aceptable es sem (el predeterminado). Esta opción resulta útil si necesita usar versiones más antiguas de GNU make, o una herramienta distinta que requiera un estilo de jobserver concreto.
Continúa en la medida de lo posible después de un error. Aunque el objetivo que falló, y los que dependen de él, no puedan rehacerse, los demás prerrequisitos de esos objetivos sí pueden procesarse igualmente. Consulte Probar la compilación de un programa.
Especifica que no deben iniciarse nuevas recetas si hay otras recetas en ejecución y el promedio de carga (load average) es al menos load (un número en coma flotante). Sin argumento, elimina un límite de carga anterior. Consulte Ejecución en paralelo.
En los sistemas que admiten enlaces simbólicos, esta opción hace que make tenga en cuenta las marcas de tiempo de los propios enlaces simbólicos, además de la marca de tiempo del archivo al que apunta el enlace. Cuando se indica esta opción, se toma la marca de tiempo más reciente entre el archivo y los enlaces simbólicos como hora de modificación de ese archivo objetivo.
Muestra la receta que se ejecutaría, pero no la ejecuta (salvo en ciertas circunstancias). Consulte En lugar de ejecutar las recetas.
No rehace el archivo file aunque sea más antiguo que sus prerrequisitos, y tampoco rehace nada más a causa de los cambios en file. En esencia, el archivo se trata como muy antiguo y sus reglas se ignoran. Consulte Evitar la recompilación de algunos archivos.
Garantiza que toda la salida de cada receta se muestre en una secuencia ininterrumpida. Esta opción solo es útil cuando se usa la opción --jobs para ejecutar varias recetas a la vez (consulte Ejecución en paralelo). Sin esta opción, la salida se mostrará a medida que la generen las recetas.
Sin tipo, o con el tipo ‘target’, la salida de toda la receta de cada objetivo se agrupa. Con el tipo ‘line’, se agrupa la salida de cada línea de la receta. Con el tipo ‘recurse’, se agrupa la salida de todo un make recursivo. Con el tipo ‘none’, no se realiza sincronización de la salida. Consulte Salida durante la ejecución en paralelo.
Muestra la base de datos (reglas y valores de variables) resultante de leer los makefiles; después se ejecuta como de costumbre o según se haya indicado de otro modo. Esto también muestra la información de versión que da el modificador ‘-v’ (véase más abajo). Para mostrar la base de datos sin intentar rehacer ningún archivo, use ‘make -qp’. Para mostrar la base de datos de reglas y variables predefinidas, use ‘make -p -f /dev/null’. La salida de la base de datos contiene información de nombre de archivo y número de línea para las definiciones de recetas y variables, de modo que puede ser una herramienta de depuración útil en entornos complejos.
«Modo pregunta» (question mode). No ejecuta ninguna receta ni muestra nada; solo devuelve un estado de salida que es cero si los objetivos especificados ya están actualizados, uno si se necesita rehacer algo, o dos si se encuentra un error. Consulte En lugar de ejecutar las recetas.
Elimina el uso de las reglas implícitas incorporadas (consulte Uso de las reglas implícitas). Todavía puede definir las suyas propias escribiendo reglas de patrón (consulte Definir y redefinir reglas de patrón). La opción ‘-r’ también borra la lista predeterminada de sufijos para las reglas de sufijo (consulte Reglas de sufijo a la antigua usanza). Pero todavía puede definir sus propios sufijos con una regla para .SUFFIXES, y luego definir sus propias reglas de sufijo. Tenga en cuenta que la opción -r solo afecta a las reglas; las variables predeterminadas siguen en vigor (consulte Variables que usan las reglas implícitas); véase también la opción ‘-R’ más abajo.
Elimina el uso de las variables incorporadas propias de las reglas (consulte Variables que usan las reglas implícitas). Por supuesto, todavía puede definir las suyas propias. La opción ‘-R’ también habilita automáticamente la opción ‘-r’ (véase más arriba), ya que no tiene sentido tener reglas implícitas sin ninguna definición de las variables que usan.
Funcionamiento silencioso; no muestra las recetas a medida que se ejecutan. Consulte Eco de las recetas.
Cancela el efecto de la opción ‘-k’. Esto nunca es necesario salvo en un make recursivo donde ‘-k’ pueda heredarse del make de nivel superior a través de MAKEFLAGS (consulte Uso recursivo de make), o si establece ‘-k’ en MAKEFLAGS en su entorno.
Esta opción habilita una forma de prueba aleatoria (fuzz-testing) de las relaciones entre prerrequisitos. Cuando el paralelismo está habilitado (‘-j’), el orden en que se construyen los objetivos se vuelve menos determinista. Si los prerrequisitos no se declaran por completo en el makefile, esto puede provocar fallos de construcción intermitentes y difíciles de localizar.
La opción ‘--shuffle’ obliga a make a reordenar deliberadamente las metas y los prerrequisitos, de modo que las relaciones objetivo/prerrequisito sigan manteniéndose, pero el orden de los prerrequisitos de un objetivo dado se reordena como se describe a continuación.
El orden en que se enumeran los prerrequisitos en las variables automáticas no cambia con esta opción.
El pseudoobjetivo .NOTPARALLEL desactiva el barajado (shuffle) para ese makefile. Asimismo, cualquier lista de prerrequisitos que contenga .WAIT no se barajará. Consulte Desactivar la ejecución en paralelo.
La opción ‘--shuffle=’ acepta estos valores:
randomElige una semilla aleatoria para el barajado. Es el valor predeterminado si no se especifica ningún modo. La semilla elegida también se pasa a las órdenes de sub-make. La semilla se incluye en los mensajes de error, de modo que pueda reutilizarse en ejecuciones futuras para reproducir el problema o comprobar que se ha resuelto.
reverseInvierte el orden de las metas y los prerrequisitos, en lugar de un barajado aleatorio.
seedUsa un barajado ‘random’ inicializado con el valor de semilla especificado. seed es un entero.
noneDesactiva el barajado. Esto anula cualquier opción ‘--shuffle’ anterior.
Toca los archivos (los marca como actualizados sin cambiarlos realmente) en lugar de ejecutar sus recetas. Esto se usa para fingir que las recetas se ejecutaron, con el fin de engañar a futuras invocaciones de make. Consulte En lugar de ejecutar las recetas.
Muestra información de traza de la ejecución de make. Usar --trace es una abreviatura de --debug=print,why.
Muestra la versión del programa make, además de un aviso de derechos de autor, una lista de autores y una nota de que no hay garantía; a continuación, termina.
Muestra un mensaje que contiene el directorio de trabajo tanto antes como después de ejecutar el makefile. Esto puede ser útil para localizar errores en anidamientos complicados de órdenes make recursivas. Consulte Uso recursivo de make. (En la práctica, rara vez necesita especificar esta opción, ya que ‘make’ lo hace por usted; consulte La opción ‘--print-directory’.)
Desactiva la impresión del directorio de trabajo bajo -w. Esta opción es útil cuando -w se activa automáticamente, pero no quiere ver los mensajes adicionales. Consulte La opción ‘--print-directory’.
Finge que el objetivo file acaba de modificarse. Usado con el indicador ‘-n’, le muestra qué ocurriría si modificara ese archivo. Sin ‘-n’, es casi lo mismo que ejecutar una orden touch sobre el archivo indicado antes de ejecutar make, salvo que la hora de modificación cambia solo en la imaginación de make. Consulte En lugar de ejecutar las recetas.
Emite un mensaje de advertencia cada vez que make ve una referencia a una variable no definida. Esto puede ser útil cuando intenta depurar makefiles que usan variables de formas complejas.