makefile automake

makefile - ¿Vale la pena aprender GNU Make?



makefile ubuntu (8)

Al igual que todas las herramientas, si lo usa en absoluto, debería dedicarle un tiempo a ser razonablemente experto en él. Además, algunas herramientas (como CMake, por ejemplo) generan makefiles y es posible que algún día necesite meterse con esos archivos generados.

GNU make tiene un excelente manual , sin duda merece la pena pasar una hora o dos leyéndolo.

Últimamente siento la necesidad de aprender una herramienta de construcción. Estoy buscando StackOverflow para recomendaciones y Gnu Make apenas se menciona. En cambio, veo a Ant, Maven, CMake, Scon y muchos otros. Sin embargo, cuando miro las pequeñas "fuentes deshonestas" (como en el no-en-el-repo) que a veces tengo que compilar, todas requieren los pasos make && make install .

¿Aprender es hacer una peor inversión de mi tiempo que aprender otra herramienta?

Si es así, ¿por qué Make es tan popular?


Creo que la razón por la que no se ve (GNU) mencionar es que a menudo es la predeterminada; si tiene una cadena de herramientas GNU, ya tendrá make. Por lo tanto, la mayoría de las personas que comienzan a hablar sobre herramientas de construcción, hablan sobre otra cosa.

En mi experiencia, make está bien, pero puede ser un poco complicado hacer que haga exactamente lo que quieres. Es quizás un poco arcano, pero está probado y funciona.


Incluso si terminas prefiriendo otra herramienta de compilación (personalmente soy aficionado a VS ... lo sé ...) saber hacer probablemente sea más útil.

Make tiene muchas aplicaciones y aunque no siempre es ideal para una sola tarea, cuando se trata de nuevas tecnologías es incondicional y flexible.


Make es la herramienta de compilación estándar para todo C / C ++. Muchos otros han llegado al límite, pero incluso cuando fueron útiles y exitosos, nunca lograron la ubicuidad de la marca.

Make está instalado prácticamente en todas las máquinas tipo Unix que existen. No importa si está trabajando con AIX, Solaris, Irix, BSD o Linux, si hay un compilador instalado, también hay make.

Algunos de los "reemplazos" (como Automake, CMake) incluso crean Makefiles, que a su vez son ejecutados por make.

Definitivamente recomendaría familiarizarme con make. Si es manejado por alguien que se tomó el tiempo para aprender sobre make, es una herramienta poderosa, que se puede utilizar de varias maneras, incluso sin estar necesariamente relacionadas con el desarrollo de software.

Incluso si termina utilizando una herramienta de compilación diferente al final, podrá "reciclar" las lecciones aprendidas con make, ya que los conceptos subyacentes son bastante similares. Y la gran cantidad de proyectos creados crea que siempre habrá la posibilidad de que tenga que descubrir un Makefile existente.

Una cosa, sin embargo. Hazlo bien desde el principio.


Make es el estándar de facto en los sistemas Linux, por ejemplo. Es una herramienta muy compleja, y también una herramienta muy poderosa.

Es adecuado para aprender si está desarrollando C o C ++, particularmente si se dirige a Linux / * nix.

Una de las características de make es que puede configurar dependencias para cuándo reconstruir un archivo. Por ejemplo, cada archivo c o c ++ se compila en un archivo .obj y, al final, todos los archivos .obj están vinculados a un archivo ejecutable. Pero tal vez el ejecutable es una biblioteca estáticamente vinculada, que está vinculada a otro ejecutable con otros archivos .obj.

Make puede asegurarse de que el tiempo de compilación sea lo más breve posible, porque puede definir que el archivo ac solo debe compilarse si es más nuevo que el archivo .obj, o cualquier archivo de encabezado dependiente. Por lo tanto, cualquier paso de compilación o vinculación solo se ejecuta si los archivos de origen actuales para el paso son más recientes que el archivo de destino.

Si está desarrollando, por ejemplo, C #, no necesita este tipo de comprobación de dependencia porque todos los archivos .cs se compilan a la vez en un único ejecutable.

Entonces, la conclusión es que debe usar una herramienta de compilación que sea adecuada para su elección de lenguaje de programación.


Make es popular porque se usa (principalmente) para fuentes C / C ++ en proyectos Linux / * nix, y es mucho más antiguo que cualquiera de las otras herramientas que has mencionado, por lo que ha resistido la prueba del tiempo y está maduro. Un poco como alquitrán

Para ser honesto contigo, solo sé hacer. Esas otras herramientas de arriba pueden ser mejores, pero tantos proyectos solo usan un Makefile básico que es mejor que conozcas al menos un poco. No solo para sus propios proyectos en el trabajo, sino también para la mayoría de los de código abierto que encuentra en la red.


Realmente depende de cuánto lo usarás.

Si trabajas mucho con proyectos de C / C ++, entonces sí, recomendaría aprender más sobre él, ya que un archivo make grande tiene una curva de aprendizaje más pronunciada que otras herramientas de compilación que mencionas.

Si no trabaja con make o trabaja en otros lenguajes como C #, Java o PHP, entonces sería mejor que aprendiera herramientas de compilación relevantes para esos idiomas.


Supongo que el lugar donde trabajas es probablemente diferente, pero sé que en todos los lugares donde trabajé habría sido un empleado mucho menos valioso si al menos no hubiera aprendido a leer Makefiles. Incluso en todos los entornos Windows-VisualStudio, aparece de vez en cuando.

Por ejemplo, acabamos de conseguir un trabajo que implica trasladar un montón de código CX / UX antiguo a Windows. El código anterior fue creado con makefiles. No hay forma de entender su viejo sistema sin saber cómo leer esos viejos archivos make.