MAKE(1)

NOMBRE
make - utilidad `make' de GNU para mantener grupos de programas

SINOPSIS
make [OPTION]... [TARGET]...

DESCRIPCIÓN

El propósito de la utilidad make es determinar automáticamente qué partes de un programa grande necesitan ser recompiladas, y ejecutar las órdenes pertinentes para recompilarlas. Este manual describe la implementación de make del proyecto GNU, que ha sido escrita por Richard Stallman y Roland McGrath. Nuestros ejemplos muestran programas en C, que es lo más común, pero se puede emplear make con cualquier lenguaje de programación cuyo compilador pueda ejecutarse con una orden del shell. De hecho, make no está limitado a compilar programas. Se puede usar para describir cualquier tarea donde algunos ficheros deban ser actualizados automáticamente a partir de otros en cualquier momento en que éstos cambien.

Para prepararnos a utilizar make, debemos escribir antes un fichero llamado el makefile que describe las relaciones entre los ficheros de nuestro programa, y las órdenes necesarias para actualizar cada fichero. En un programa, normalmente el fichero ejecutable se actualiza a partir de los ficheros o módulos objeto, los cuales a su vez se construyen mediante la compilación de los ficheros con el código fuente.

Una vez que exista un makefile apropiado, cada vez que cambiemos algún fichero fuente, esta simple orden:

    make

es suficiente para que se realicen todas las recompilaciones necesarias. El programa make emplea los datos del makefile (y otros internos) y los tiempos de última modificación de los ficheros para decidir cuáles de ellos necesitan ser actualizados. Para cada uno de esos ficheros, ejecuta las órdenes indicadas en el makefile.

make ejecuta órdenes en el makefile para actualizar uno o más nombres de objetivo, donde nombre es típicamente un programa. Si no se ha dado la opción -f, make buscará los makefiles llamados GNUmakefile, makefile, y Makefile, en este orden, parando en el primero que encuentre y dando un error si no encuentra ninguno.

Normalmente deberíamos llamar a nuestro makefile o bien makefile o bien Makefile. (Recomendamos Makefile porque normalmente aparece cerca del principio del listado de un directorio, al lado de otros ficheros importantes como LÉAME.) El primer nombre que se busca, GNUmakefile, no se recomienda para la mayoría de los makefiles. Solamente deberíamos emplear este nombre si tenemos un makefile que sea específico del make de GNU y no pueda ser leído y comprendido por otras versiones de make. Si makefile es `-', se lee de la entrada estándar.

make actualiza un objetivo si éste depende de ficheros de prerrequisito (o dependencias) que hayan sido modificados desde la última modificación del objetivo, o si éste no existe.

OPCIONES

-b, -m
    Estas opciones no hacen nada, y solo se reconocen por compatibilidad con otras versiones de make.

-B, --always-make
    Ejecuta incondicionalmente todos los objetivos.

-C dir, --directory=dir
    Cambia el directorio de trabajo a dir antes de leer los makefiles o hacer otra cosa. Si se especifican varias opciones -C, cada una se interpreta en relación a la anterior: -C / -C etc es equivalente a -C /etc. Esto se usa típicamente en llamadas recursivas a make.

-d  Muestra información de depuración además del procesamiento normal. Esta información dice qué ficheros están siendo considerados para ser rehechos, qué tiempos de ficheros están siendo comparados y con qué resultados, qué ficheros necesitan realmente ser rehechos, qué reglas implícitas están siendo tenidas en cuenta y cuáles se están aplicando: o sea, todo lo interesante sobre cómo make decide las cosas que tiene que hacer.

--debug[=FLAGS]
    Print debugging information in addition to normal processing. If the FLAGS are omitted, then the behavior is the same as if -d was specified. FLAGS may be a for all debugging output (same as using -d), b for basic debugging, v for more verbose basic debugging, i for showing implicit rules, j for details on invocation of commands, and m for debugging while remaking makefiles. Use n to disable all previous debugging flags.

-e, --environment-overrides
    Da a las variables que vienen del entorno precedencia a las que vienen de los makefiles.

-f fichero, --file=fichero, --makefile=FICHERO
    Emplea fichero como un makefile.

-i, --ignore-errors
    No tiene en cuenta ningún error en las órdenes ejecutadas para reconstruir ficheros.

-I dir, --include-dir=dir
    Especifica un directorio dir en donde buscar makefiles incluidos. Si se usan varias opciones -I para especificar varios directorios, éstos se buscan en el orden dado. De forma distinta a como se deben dar los argumentos de otras opciones de make, los directorios dados en las opciones -I pueden ir inmediatamente tras la I: o sea, se permite tanto -Idir como -I dir. Esta sintaxis se permite por compatibilidad con la misma opción -I del preprocesador de C.

-j [trabajos], --jobs[=trabajos]
    Specifies the number of jobs (commands) to run simultaneously. If there is more than one -j option, the last one is effective. If the -j option is given without an argument, make will not limit the number of jobs that can run simultaneously. When make invokes a sub-make, all instances of make will coordinate to run the specified number of jobs at a time; see the section PARALLEL MAKE AND THE JOBSERVER for details.

--jobserver-fds [R,W]
    Internal option make uses to pass the jobserver pipe read and write file descriptor numbers to sub-makes; see the section PARALLEL MAKE AND THE JOBSERVER for details

-k, --keep-going
    Continúa tanto como sea posible tras un error. Mientras que el objetivo que ha fallado, y los que dependen de él, no pueden ser reconstruidos, las otras dependencias de estos objetivos sí que pueden procesarse, así que con esta opción se procesan.

-l [carga], --load-average[=carga]
    Dice que no deberá empezarse ningún nuevo trabajo (mandato) si hay otros trabajos en ejecución y la carga media es como poco carga (un número real, en coma flotante). Sin el argumento, anula un límite anterior de carga, si lo hubiera.

-L, --check-symlink-times
    Emplea el tiempo de la última modificación entre los enlaces simbólicos y el objetivo.

-n, --just-print, --dry-run, --recon
    Muestra las órdenes que se ejecutarían, pero no se ejecutan salvo en alguna circunstancia concreta.

-o fichero, --old-file=fichero, --assume-old=fichero
    No reconstruye el fichero especificado, incluso siendo más antiguo que sus dependencias, y tampoco reconstruye nada que dependa de cambios en fichero. Esencialmente el fichero se trata como muy viejo, y sus reglas no son tenidas en cuenta.

-O[tipo], --output-sync[=tipo]
    When running multiple jobs in parallel with -j, ensure the output of each job is collected together rather than interspersed with output from other jobs. If type is not specified or is target the output from the entire recipe for each target is grouped together. If type is line the output from each command line within a recipe is grouped together. If type is recurse output from an entire recursive make is grouped together. If type is none output synchronization is disabled.

-p, --print-data-base
    Muestra la base de datos (reglas y valores de variables) que resultan de leer los makefiles; luego todo se procesa de la forma usual o de la que se haya especificado. También se muestra la información de versión dada por la opción -v (vea más abajo). Para ver la base de datos sin hacer ninguna otra cosa, dé la orden make -p -f/dev/null.

-q, --question
    “Modo de interrogación (Query)”. No ejecuta ninguna orden ni muestra nada; solo devuelve un status de salida cero si los objetivos especificados ya están actualizados, o no cero si no lo están.

-r, --no-builtin-rules
    Elimina el empleo de las reglas implícitas incorporadas. También borra la lista predeterminada de sufijos para las reglas de sufijo.

-R, --no-builtin-variables
    No define ninguna variable interna.

-s, --silent, --quiet
    Modo de operación silencioso; no muestra las órdenes que se están ejecutando.

-S, --no-keep-going, --stop
    Cancela el efecto de la opción -k. Esto nunca es necesario salvo en un make recursivo, en el que -k puede venir heredado del make superior a través de MAKEFLAGS o si activamos -k en la variable de entorno MAKEFLAGS.

-t, --touch
    Toca los ficheros (los marca como actualizados sin cambiarlos realmente) en vez de ejecutar las órdenes pertientes. Esto se emplea para pretender que las órdenes han sido ejecutadas, con el fin de engañar a futuras ejecuciones de make.

--trace
    Information about the disposition of each target is printed (why the target is being rebuilt and what commands are run to rebuild it).

-v, --version
    Print the version of the make program plus a copyright, a list of authors and a notice that there is no warranty.

-w, --print-directory
    Muestra un mensaje conteniendo el directorio de trabajo antes y después de otro procesamiento. Esto puede ser útil para seguir la pista a errores que vienen de anidamientos complicados de órdenes make recursivas.

--no-print-directory
    Desactiva -w aunque haya sido indicada expresamente.

-W fichero, --what-if=fichero, --new-file=fichero, --assume-new=fichero
    Pretende que el objetivo fichero acaba de ser modificado. Cuando se emplea con la opción -n, esto nos enseña lo que pasaría si fuéramos a modificar ese fichero. Sin -n, es casi lo mismo que ejecutar la orden touch en el fichero dado antes de dar la orden make, salvo en que el tiempo de modificación se cambia solamente en la imaginación de make.

--warn-undefined-variables
    Avisa en caso de referenciar alguna variable sin definir.

ESTADO DE SALIDA
GNU make exits with a status of zero if all makefiles were successfully parsed and no targets that were built failed. A status of one will be returned if the -q flag was used and make determines that a target needs to be rebuilt. A status of two will be returned if any errors were encountered.

VÉASE TAMBIÉN
La documentación completa de make se mantiene como manual Texinfo. Si los programas info y make están adecuadamente instalados en su sistema, la orden

    info make

should give you access to the complete manual. Additionally, the manual is also available online at https://www.gnu.org/software/make/manual/html_node/index.html

EJECUCIÓN PARALELA Y SERVIDOR DE TAREAS
Using the -j option, the user can instruct make to execute tasks in parallel. By specifying a numeric argument to -j the user may specify an upper limit of the number of parallel tasks to be run.

When the build environment is such that a top level make invokes sub-makes (for instance, a style in which each sub-directory contains its own Makefile ), no individual instance of make knows how many tasks are running in parallel, so keeping the number of tasks under the upper limit would be impossible without communication between all the make instances running. While solutions like having the top level make serve as a central controller are feasible, or using other synchronization mechanisms like shared memory or sockets can be created, the current implementation uses a simple shared pipe.

This pipe is created by the top-level make process, and passed on to all the sub-makes. The top level makeprocesswrites N-1 one-byte tokens into the pipe (The top level make is assumed to reserve one token for itself). Whenever any of the make processes (including the top-level make ) needs to run a new task, it reads a byte from the shared pipe. If there are no tokens left, it must wait for a token to be written back to the pipe. Once the task is completed, the make process writes a token back to the pipe (and thus, if the tokens had been exhausted, unblocking the first make process that was waiting to read a token). Since only N-1 tokens were written into the pipe, no more than N tasks can be running at any given time.

If the job to be run is not a sub-make then make will close the jobserver pipe file descriptors before invoking the commands, so that the command can not interfere with the jobserver, and the command does not find any unusual file descriptors.

ERRORES
Consulte el capítulo “Problems and Bugs” en The GNU Make Manual.

AUTOR
Dennis Morse, de la Stanford University, escribió originalmente esta página del Manual. Mike Frysinger y Roland McGrath trabajaron posteriormente en ella.Actualmente la mantiene Paul Smith.

COPYRIGHT
Copyright © 1992-1993, 1996-2016 Free Software Foundation, Inc. Este archivo forma parte de GNU make.

GNU Make is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.

GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with this program. If not, see http://www.gnu.org/licenses/.

TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Gerardo Aburruzaga García <gerardo.aburruzaga@uca.es> y Marcos Fouces <marcos@debian.org>

Esta traducción es documentación libre; lea la GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) o posterior con respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.

Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a debian-l10n-spanish@lists.debian.org.