GNU Make

Notas en el uso (y abuso) de la utilería GNU Make.

Introducción

Estas son simplemente algunas notas al respecto del uso y explotación de una utilería que muchos asocian exclusivamente con C. La herramienta, sin embargo, es mucho más que un mero administrador de scripts para facilitar la compilación de programas o proyectos en C o C++.

Generalidades1

make(1) no está diseñado para ejecutar un objetivo o meta (taget) y pasar argumentos a ese objetivo. Todos los argumentos en la línea de comando se interpretan como un objetivo, como una opción o como una asignación variable.

Así que, el ejecutar algo como:

$ make run foo bar --wat var=arg

se interpretará como la solicitude trabajar sobre las metas u objetivos runfoo, y bar conforme sus recetas (recipes) indiquen, --wat como una opción para make(1) (ojo, no para los objetivos indicados), y var=arg como una asignación de variable.

Return codes

make(1) regres un código de retorno de valor cero (0) cuando, por defecto, o explícitamente, la ejecución de alguna regla termina bien. Si la regla invocada no existe se regresa un valor 2.

Más allá del uso normal de make(1)

 

Troubleshooting y dudas frecuentes

make: *** No rule to make target `‘…’. Stop.

Una duda o problema aparentemente frecuente es la que se reporta cuando parece no haber una regla para trabajar sobre el argumento proporcionado. Este mensaje no cambia el return code, es decir, éste es 0 (cero) si algo fue ejecutado, en caso contrario make(1) devolverá un código de retorno 2. Sin embargo, el mensaje no deja de ser molesto. La aparente confusión inicia pensando en que los argumentos a make(1) pueden ser usados como parámetros para un target. Pero, como se describe en Generalidades, ¿cómo distinguir entre aquello de se espera sea tomado como objetivo y aquello que deba ser tomado como argumento u opción de make(1)? Simplemente no hay forma; así que hay que ingeniárselas. Una solución que he probado y funcionado es la dada como «método 1» por el usuario «lesmana» a la pregunta hecha en StackOverflow2.


Referencias

  1. Free Software Foundation, «GNU Make Manual«, gnu.org, web. Updated: 2016.05.22; visited: 2019.12.29. URL: https://www.gnu.org/software/make/manual/.
  2. «Passing arguments to “make run”StackOverflow, web. Asked: 201.02.06 20:16:13Z; visited: 2019.12.29. URL: https://stackoverflow.com/questions/2214575/passing-arguments-to-make-run.

Twitter Wordpress eMail
© Todos los derechos reservados.
Dr. Eduardo René Rodríguez Avila
Creación: 2019.12.29
Última actualización: 2019.12.29
El contenido de este sitio puede ser copiado y reproducido libremente mientras no sea alterado y se cite su origen. Marcas y productos registrados son citados por referencia y sin fines de lucro o dolo. Todas las opiniones son a título personal del o los autores de éstas y, salvo sea expresado de otro modo, deben considerarse como registro y expresión de la experiencia de uso de aquello que es tratado. Para conocer más sobre la posición de privacidad y responsabilidad de lo que se presenta en este sitio web y como ha sido obtenido, consulte la declaración al respecto.