Trabajo en c ++ principalmente como un pasatiempo (todavía estoy en la escuela y, por lo tanto, no tengo un trabajo real). Los IDEs generan el archivo MAKE para mí y me pregunto si vale la pena aprender cómo hacerlos yo mismo. Por "vale la pena aprender" quiero decir, ¿debería dejar todo y aprender a escribirlos antes de continuar aprendiendo c ++? ¿Aprenderlos será realmente necesario? Si es así, ¿debería aprender sobre ellos (sintaxis general y comprender cómo funcionan, etc.) o realmente aprender a escribirlos?
12
Respuestas:
Sí, definitivamente vale la pena entender cómo funcionan los Makefiles. Puede que no sea relevante para usted en este momento (porque está utilizando un IDE que los genera), pero lo más probable es que el conocimiento sea útil en el futuro.
Francamente, esa es una noción extraña de "vale la pena aprender" ...
Pero no, no creo que necesites hacer eso.
No podemos predecir si realmente necesitará este conocimiento en el futuro. Depende de si continúa con la programación C ++ y en qué contexto lo hace.
Recomiendo ambos. Si no puede escribir un Makefile, es discutible que sepa lo que está sucediendo.
Existe el otro punto de vista que dice que demasiado conocimiento no es útil.
Si profundiza en esto, aprenderá que hay muchas versiones diferentes de Make, y que escribir un Makefile complicado que funciona con múltiples versiones de Make en múltiples plataformas es ... difícil. Sin embargo, en el mundo del código abierto, es una "mejor práctica" utilizar herramientas como
automake
,autoconf
etc., para generar los archivos MAKE, etc. Si lo hace, gran parte de la complejidad relacionada con la versión / plataforma se trata detrás de escena. .Finalmente, etiquetó la pregunta con "java". Mi opinión es que no debe usar
make
para crear aplicaciones Java (a menos que también esté creando bibliotecas de código nativo). Hay herramientas de compilación específicas de Java que son mucho más fáciles de usar ... y hacen un mejor trabajo quemake
.fuente
Si está trabajando con código abierto o sistemas operativos tipo Unix, sí. Sin embargo, anímate, no son tan complicados. Aprender
make
le ahorrará mucho tiempo a largo plazo.fuente
Los Makefiles son importantes en los sistemas UNIX (por ejemplo, AIX, Linux, OS X). Sin embargo, creo que su importancia absoluta "tienes que saberlo" ha disminuido en los últimos años. Por ejemplo, realmente no los encuentra en el desarrollo de Windows (Visual Studio, etc.) y XCode (en OS X) usa un sistema completamente diferente. No me gusta mucho Java, pero creo que usan archivos de hormigas y demás.
Hay un sistema muy bueno llamado CMake que genera archivos de compilación nativos para el sistema operativo en el que se está ejecutando. Por ejemplo, si escribe la especificación de su proyecto en CMake, puede crear un proyecto de compilación de Visual Studio en Windows, un proyecto XCode en Mac y un Makefile en Linux. En cierto modo, CMake reemplaza autoconf y automake.
Por lo general, creo archivos CMake para mis "grandes proyectos", pero sé Make en caso de que quiera escribir un Makefile rápido "solo hazlo". Es bueno para su alfabetización cultural, porque hay toneladas y toneladas de bibliotecas de software que usan Makefiles, y inevitablemente necesitará editar los compiladores específicos y las ubicaciones de las bibliotecas. Pero encontrará que los grandes proyectos (como KDE) están migrando hacia CMake y similares, ya que Make tiene algunas limitaciones que crían su fea cabeza cuando los proyectos se complican.
fuente
Soy parcial ya que creo que los makefiles son un sistema terrible. Debería aprender la sintaxis general para poder modificar un archivo MAKE existente. Pero no creo que sea útil aprender todo al respecto ni hacer uno desde cero.
fuente
Al igual que con muchos aspectos de la salida IDE, un archivo MAKE autogenerado típico a menudo está estructurado de manera ineficiente.
Con un nivel adecuado de comprensión, a menudo es posible mejorar significativamente el rendimiento (compilaciones más rápidas, etc.). Sin embargo, a menos que realmente sepa lo que está sucediendo, es más probable que FUBAR, cuando juegue con un archivo autogen-ed.
Recomiendo encarecidamente poder comprender lo que está sucediendo ... si posteriormente elige comenzar a editar uno existente o crear el suyo propio, es un tema diferente.
fuente
Ser capaz de usar con éxito
make
o algo así le permite marcar la casilla "entiende cómo modelar las dependencias entre partes de un programa compuesto por más de un módulo".fuente
Aprender a escribir Makefiles es una buena idea por varias razones.
fuente
Siempre debe intentar comprender el sistema de compilación que está utilizando.
Eso no significa necesariamente que deba poder crear todos los archivos de compilación a mano. La parte importante es comprender qué está haciendo el sistema de compilación para su proyecto y la capacidad general de compilar pequeños proyectos manualmente (como en "escribir comandos en una terminal").
Solo tiendo a pensar que crear Makefiles (simples) es el paso más fácil para comprender lo que está sucediendo, pero es posible que tenga otros medios para comprender cómo construir cosas.
Por qué / cuándo aprender Makefiles
Si sigue programando solo para Windows y no espera que nadie más compile su código, siéntase libre de compilar el código como desee.
Si desea programar el compilador agnóstico (como en "dejar que otros decidan qué compilador o IDE quieren usar"), entonces debe aprender otro sistema de compilación que simplemente dejar que su IDE "se encargue de ello".
Si desea programar para diferentes plataformas, entonces ciertamente necesita usar un sistema de compilación generalizado.
Eso todavía no significa que deba saber en detalle cómo funcionan los Makefiles autogenerados. Solo tiene que saber cómo funcionan los archivos de entrada para el sistema de compilación. Es posible que a veces tengan una sintaxis similar.
Personalmente, me gustan mucho los Makefiles y los uso para muchas cosas. No solo compilando código. Creo un Makefile para cada PDF más grande que creo (con LaTeX) y para cada proyecto en el que necesito automatizar un par de tareas (construcción, empaquetado, carga, actualización de dependencias desde repositorios de origen, copias de seguridad manuales de extracción / inserción)
Sin embargo, estoy trabajando mucho en el terminal y estoy trabajando con Linux. No uso lo que llamarías un IDE que no sea vim (potente editor de texto) y herramientas de consola. Esto podría ser muy diferente para ti.
Si alguna vez se quejó de tener que ejecutar diferentes comandos recurrentes solo para "actualizar" / paquete / cargar / ... un "proyecto", entonces aprender a escribir Makefiles podría ser algo útil para usted.
Si tiene y usa herramientas / GUI / IDEs para todo, entonces es posible que no obtenga nada de ese conocimiento.
fuente