¿Alguna buena herramienta de construcción para un proyecto de C++ que pueda reemplazar a make?
-
09-06-2019 - |
Pregunta
Me pregunto si existe alguna herramienta agradable y ordenada para reemplazar GNU Autotools o Make para construir un proyecto C++ muy grande, que son tan complicados de usar.
Es sencillo generar todos los archivos que requiere Autotools si el proyecto es pequeño, pero si el código fuente está dividido en muchos directorios, con múltiples bibliotecas de terceros y muchas dependencias, caes en el "Infierno de Autotools".
gracias por cualquier recomendación
Solución
El Motor JavaScript de Google V8 está escrito en C++ y utiliza Desventajas, así que supongo que es un voto a favor.
Otros consejos
Chacer?(genera archivos MAKE, por lo que técnicamente no es un reemplazo como tal).
Yo también he visto "Desventajas"Apareció en algunos lugares recientemente.Sin embargo, yo mismo no he creado nada con él.
Echa un vistazo a waf.
Creo que puedes considerarlo como un reemplazo completo de Make y Autotools.Está basado en Python.Una cosa que me gusta de waf es que el script waf en sí es ~100kb independiente y se coloca en el directorio raíz de su proyecto.Esto contrasta con make or rake and friends, donde el sistema de compilación debe instalarse primero.Sin embargo, debes tener instalado Python >=2.3.
~$ ./waf configure && ./waf && ./waf install
El equivalente de Waf a Makefiles es el archivo wscript.Es un script de Python que lee waf y define al menos 3 funciones: set_options()
, configure(conf)
y build(bld)
.Puedes adivinar qué hace cada uno de ellos.
Para comenzar, recomiendo buscar en los archivos demos/cpp/* en la distribución fuente.También eche un vistazo al documento/waf.pdf archivo;es un documento de 12 páginas que lo pondrá rápidamente en funcionamiento.
Para comparar la velocidad de varias herramientas de compilación de C++, puede consultar este punto de referencia:http://retropaganda.info/~bohan/devel/wonderbuild/benchmarks/time.xml
Usamos Jam para un proyecto complejo de C++; una ventaja es que es muy multiplataforma.En lugar de hablar de los beneficios, simplemente eche un vistazo rápido a este enlace:http://www.perforce.com/jam/jam.html
Noel Llopis ha escrito algunos artículos comparando sistemas de construcción.La parte 1 de "La búsqueda del sistema de construcción perfecto" está en http://gamesfromwithin.com/the-quest-for-the-perfect-build-system.La parte 2 sigue en el mismo sitio.Se informa un reintento de Scons en http://juegosfromwithin.com/?p=104.
Conclusiones:SCons es demasiado lento...Jam es el ganador.
Cook es otra herramienta que se puede utilizar para reemplazar a make.He visto varias empresas grandes usándolo.Por lo tanto, está preparado para la empresa, aunque el sitio web parece bastante anticuado.
Estoy usando SCons en un gran proyecto de C++ (tanto en Linux como en Windows) y funciona muy bien.
scons all -j8
(que compila archivos objeto en paralelo) ¡es genial!
yo suelo archivo horneado para mi proceso de construcción y me convertí en un gran admirador!
Ya nunca más tendré que escribir un Makefile, y mucho menos los horribles scripts de GNU autotools.Todo lo que tengo que hacer es proporcionar un XML
archivo que describe los objetivos de compilación.Bakefile puede convertir esto en un Makefile que obtenga todas las dependencias (archivo de encabezado) correctas, etc., donde se pueden elegir diferentes formatos de Makefile (pegando la lista de la documentación):
available formats are:
autoconf GNU autoconf Makefile.in files
borland Borland C/C++ makefiles
dmars Digital Mars makefiles
dmars_smake Digital Mars makefiles for SMAKE
gnu GNU toolchain makefiles (Unix)
mingw MinGW makefiles (mingw32-make)
msevc4prj MS eMbedded Visual C++ 4 project files
msvc MS Visual C++ nmake makefiles
msvc6prj MS Visual C++ 6.0 project files
msvs2003prj MS Visual Studio 2003 project files
msvs2005prj MS Visual Studio 2005 project files
symbian Symbian development files
watcom OpenWatcom makefiles
xcode2 Xcode 2.4 project files
Yo suelo utilizar el configuración automática opción, y escribe los molestos scripts de GNU autotools por mí.Tuve que adaptar el configure.ac
script, de modo que configure encuentre una determinada biblioteca en cualquier sistema.Pero no estuvo tan mal.Obtener los scripts de autoconf de esta manera es bueno, porque no tengo que escribirlos todos yo solo, y cuando distribuya mi proyecto parecerá como si los hubiera escrito yo, y los usuarios aún pueden construir mi proyecto en el mejor de los casos. dado paso, con
./configure && make && make install