Pregunta

Estoy tratando de aprender GNUMake para un pequeño proyecto en el que estoy trabajando. Hasta ahora, incluso el " básico " Los tutoriales parecen bastante difíciles y todavía tengo que entender la sintaxis de makefile.

¿Alguien tiene algunos buenos recursos para que un principiante absoluto se familiarice con GNUMake?

¿Fue útil?

Solución

La guía definitiva es http://www.gnu.org/software/ make / manual / make.html
Hay un libro de O'reilly " Gestión de proyectos con GNU Make " que tiene mas explicacion También puedes usar las ediciones anteriores, no cubren GnuMake específicamente, pero son mucho más delgadas.

Make es un secreto sucio entre los desarrolladores: ninguno de nosotros lo entiende, solo tomamos prestado un script make de otra persona y lo cambiamos. Imagino que solo un script fue escrito desde cero (probablemente por el creador de la herramienta).

Cuando necesita hacer más que el simple ejemplo, la mayoría de las personas cambian a un sistema de compilación más moderno como Ant o ruedan en Perl / Python / etc.

Otros consejos

Las funciones más utilizadas de make se pueden dividir en dos conceptos, objetivos, dependencias y variables simples.

Los objetivos son las cosas que desea compilar, pero los comandos debajo de un objetivo pueden ser comandos o scripts del compilador. En general, cada objetivo se refiere a un módulo en su código, pero puede hacerlos tan granulares como desee para adaptarlos a su proyecto.

Las dependencias son archivos u otros objetivos en su proyecto. El mejor ejemplo de esto es para un proyecto de C en el que estás creando un binario a partir de un montón de archivos de objetos. Cada archivo de objeto deberá existir antes de que pueda compilar el binario, por lo tanto, make atravesará sus objetivos hasta que todas las dependencias se hayan completado, y luego ejecute el comando para el objetivo general.

Las variables no siempre son necesarias, pero son bastante útiles para manejar cosas como las banderas del compilador. Los ejemplos canónicos son CC y CCFLAG que se referirán al compilador que usas, es decir, gcc y las banderas como -ansi -Wall -o2.

Un par de consejos y trucos más generales:

  • Los comandos deben deben ser procesados ??por un carácter [tab], o no se ejecutarán, esto es solo una vieja reliquia de make, no recuerdo por qué esto es.
  • Por convención, es posible que desee incluir un objetivo general para especificar el valor predeterminado, cuyo objetivo debería ser el predeterminado. Esto es útil cuando tienes un makefile complejo y hay un objetivo particular que siempre quieres que sea el predeterminado.
  • Tu makefile debe llamarse makefile o Makefile, pero si quieres llamarlo de otra manera, usa $ make -f [makefilename]
  • Siempre use la sintaxis de expansión de la variable completa, es decir, $ (VARIABLE) o puede que la salida no genere los comandos que desea.
  • make puede funcionar de forma recursiva, por lo que si tiene un grupo de submódulos en su proyecto que viven dentro de directorios, puede llamar a make en el subdirectorio makefile desde dentro de make para construir cada uno.
  • Si tiene un proyecto realmente complicado que necesita scripts de instalación, etc., es probable que también desee investigar las autotools que generan el makefile para usted y haga un montón de trucos para verificar la existencia de la biblioteca y otros problemas de portabilidad.

" Gestión de proyectos con GNU Make, 3ª edición " se encuentra bajo " Licencia de documentación libre de GNU " y se puede leer legalmente en línea de forma gratuita: enlace .

Estoy de acuerdo con la sugerencia del libro O'Reilly.

Para obtener algunos consejos, trucos e ideas útiles sobre el aspecto Make en el Mr . Hacer artículos

mgb: Es aún peor que eso. Una vez escribí un sistema de creación complicado desde cero (unos pocos miles de archivos, cincuenta o cien directorios, cuatro o cinco compiladores y objetivos de compilación cruzada, 2 sistemas operativos, etc.). Me senté y aprendí gnu make por dentro y por fuera, diseñé el sistema, jugué con un prototipo primero. Todos estábamos muy contentos con el resultado.

Pero eso fue hace años. ¿Sabes cómo los escribo hoy? De la misma manera que usted describe. Es bastante complicado y los detalles de la sintaxis son lo suficientemente oscuros como para que a menos que lo hagas con regularidad, no puedas recordar los detalles. Al igual que cualquier otro idioma con sintaxis no intuitiva y algunas reglas extrañas, supongo.

No soy un gran fanático del sistema de información GNU, pero he encontrado que las páginas de información de GNU son muy útiles. Una vez que conoce los conceptos muy básicos y aproximadamente qué tipo de cosas están disponibles, he descubierto que las páginas de información son la forma más rápida de referir información como, por ejemplo, funciones precompiladas.

(Olvídese del programa GNU info y use, por ejemplo, pinfo en su lugar.)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top