c++ - compilar - ¿Alguna buena herramienta para la generación de archivos MAKE?
gcc linux (10)
Una adición reciente a la lista de reemplazos de make es waf . Desde la experiencia personal SCONS hace el trabajo bastante bien.
Estoy buscando una herramienta que pueda generar makefile para un proyecto de C / C ++ para diferentes compiladores (gcc, microsoft vc ++, borland, etc.) y diferentes plataformas (Win, Linux, Mac).
También seré segundo en CMake. Lo he usado durante bastante tiempo en un proyecto multiplataforma y estoy muy satisfecho con él.
Un tema a considerar es ¿quieres un creador de "makefile" o un sistema de compilación de reemplazo? El problema con los sistemas de compilación de reemplazo es que normalmente no se obtiene una buena integración IDE para las plataformas cuyos usuarios esperan esto (Visual C ++). Si desea un creador de makefile en lugar de un sistema de compilación de reemplazo, eche un vistazo a MPC . Es gratis y de código abierto.
He usado Bakefile antes con cierto éxito. Es bastante simple y parece funcionar bien.
CMake es la única herramienta que realmente puede generar proyectos reales de Visual Studio (es decir, no "Makefile" -proyectos que llaman a una herramienta externa), y que recrea automáticamente los proyectos cuando el archivo de entrada de compilación (CMakeLists.txt) cambia.
Los problemas de rendimiento de SCons son bien conocidos y un tema ampliamente debatido en las listas de correo de SCons.
Yo votaría por OMake . Soluciona todas las quejas que tuve con GNU make:
- es un lenguaje en toda regla.
- usa MD5 en lugar de marcas de tiempo.
- proporciona un shell mínimo que implementa los comandos de Unix más útiles en todas las plataformas: find, sed, awk, etc ...
- funciona con rutas de estilo de estilo unix o dos.
- ampliamente documentado.
- admite compilaciones paralelas.
- rápido.
La generación automática de akefiles (M | m) me hace preocuparme por lo que estás tratando de hacer aquí.
¿Entiendes lo que sucede bajo las sábanas cuando escribes make? O gmake? Solo estoy preguntando porque si no lo haces cuando se rompen cosas, como que los nuevos cambios de código no se incorporen a la compilación, tendrás dificultades para tratar de resolver lo que sucedió.
Para comenzar a entender la marca, ¿puedo sugerir que lea " Gestión de proyectos con GNU Make " por Robert Mecklenberg. Los primeros capítulos cubren cómo funciona make. Entender el hecho de que hacer un encadenamiento hacia atrás es una de las cosas más importantes que puede hacer.
Si no lo hace, y su sistema parece funcionar, entonces será, para usar el término de los programadores pragmáticos, " programación por coincidencia ". (-:
BTW Grandes artículos disponibles en su sitio! Y no estoy involucrado con ellos. YMMV. Yada yada...
¿Has probado Automatic Makefile Generator ?
Es compatible con los siguientes compiladores:
Borland 3.1 Borland 5.0 Borland 5.0, 16 bit Borland 5.5 Borland 5.6 Borland 5.8 CC Gnu g++ Gnu g++, dynamic library Intel 5, 6, 7 for Linux Intel 5, 6, 7 for Linux, dynamic library Intel 5, 6, 7 for windows Intel 8,9,10 for Linux Intel 8,9,10 for Linux, dynamic library Intel 8,9 for windows Intel 10 for windows Visual C++ 5 Visual C++ 6, 7, 7.1 Visual C++ 8 Open Watcom Watcom 10A Watcom 10A, 16 bit
Otras sugerencias que quizás desee considerar:
Scons es una biblioteca de creación multiplataforma y de compilación cruzada que utiliza el escrutinio de Python para los sistemas de compilación. Se usa en una variedad de proyectos grandes y funciona muy bien.
Si usas Qt, QMake también es un buen sistema de compilación.
CMake también es muy dulce.
Finalmente, si todo lo demás falla ...
No sé si ya tienes interés en esta pregunta. Estoy trabajando en una proyección de generador de Makefile similar llamada CodeMate , desarrollada con Ruby. Tal vez no sea tan maduro para grandes aplicaciones en este momento, pero seguiré trabajando para mejorarlo. Los usuarios no deberían necesitar editar ningún archivo de configuración para construir el software, o al menos se supone que debe serlo. La curva de aprendizaje debe ser minimizada.