make - utilidad `make' de GNU para mantener grupos de
programas
make [OPTION]... [TARGET]...
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.
- -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.
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.
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
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.
Consulte el capítulo “Problems and Bugs” en
The GNU Make Manual.
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 © 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/.
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 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.