2009-08-27 18 views
18

Últimamente estoy sintiendo 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.¿Vale la pena aprender GNU Make?

Está aprendiendo Hacer una peor inversión de mi tiempo que aprender otra herramienta?

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

Respuesta

24

Marca es herramienta de construcció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 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.

Yo definitivamente recomiendo que te familiarices con make. Si es manejado por alguien que se tomó el tiempo para aprender acerca de make, es una herramienta poderosa, que se puede utilizar de varias maneras ni siquiera 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 significa que siempre habrá la posibilidad de que tenga que descubrir un Makefile existente.

Una cosa, sin embargo. Get it right from the beginning.

+0

http://stackoverflow.com/questions/559216/what-is-your-experience-with-non-recursive-make es un buen enlace también, a pesar de que aparece en la página de google que mencionaste. –

+0

Varios años después, me he aficionado bastante a [CMake] (http://www.cmake.org), y configuré un [paquete listo para usar] (http://rootdirectory.de/wiki/ JAWS) para iniciar un proyecto de C++ con CMake. Pero todavía digo "sí" a la pregunta: ¿Vale la pena aprender GNU Make? Definitivamente es. Eso no dice que no valdría la pena aprender, p. CMake * también *. – DevSolar

3

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 ha mencionado, por lo tanto, ha resistido el paso del tiempo y es maduro. Un poco como alquitrán

Para ser sincero, 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.

+7

Es básico, autónomo (no necesita python, jre, php # .net con ruby ​​bindings enterprise edition, lo que sea que se ejecute), más o menos neutralidad del lenguaje. –

2

Realmente depende de cuánto va a usarlo.

Si trabajas mucho con proyectos de C/C++, entonces sí, recomendaría aprender más sobre él ya que un archivo de gran tamaño 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.

0

Incluso si terminas prefiriendo otra herramienta de construcció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.

8

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, hacer está bien, pero puede ser un poco complicado conseguir que haga exactamente lo que quieres. Es quizás un poco arcano, pero está probado y funciona.

1

Al igual que todas las herramientas, si las usa en absoluto, debe poner algo de tiempo para convertirse en un experto en ello. Además, algunas herramientas (como CMake, por ejemplo) generan makefiles y es posible que algún día necesite meterse con esos archivos generados.

La marca GNU tiene un excellent manual - sin duda merece la pena pasar una o dos horas leyéndola.

0

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 los 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.

1

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 ideal para saber si está desarrollando C o C++, particularmente si se dirige a Linux/* nix.

Una de las características de make es que puede configurar las dependencias para cuándo reconstruir un archivo. P.ej. cada archivo c o C++ está construido 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 un archivo c solo debe compilarse si el archivo .obj, o cualquier archivo de encabezado dependiente, es más nuevo. 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.

Por lo tanto, la conclusión es que debe utilizar una herramienta de compilación adecuada para su elección de lenguaje de programación.