2008-09-10 17 views
22

me pregunto si hay alguna herramienta buena y ordenada para reemplazar las AutoTools de GNU o Make para construir un gran proyecto de C++, que es algo tan complicado de usar.¿Alguna buena herramienta de construcción para un proyecto de C++, que puede reemplazar a make?

Es simple generar todos los archivos que de Autotools requieren 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, se cae en el "Infierno de Autotools" ..

gracias por las recomendaciones

Respuesta

18

El Google V8 JavaScript Engine está escrito en C++ y utiliza SCons, así que supongo que eso es un voto por él.

+2

Hemos descubierto que SCons es inútilmente lento para las grandes soluciones de Visual Studio. Funciona muy bien en sistemas UNIX-ish. –

+0

@Kristopher: ¿Pueden dar más detalles? No he encontrado que este sea el caso en mi experiencia. ¿Dónde generas los archivos scons de los archivos devstudio? – grieve

+2

En segundo lugar, SCons es muy lento cuando se trata de compilaciones más grandes. – jkp

18

CMake? (genera makefiles, por lo que técnicamente no es un reemplazo como tal).

También he visto "SCons" aparecer recientemente en algunos lugares. Aunque no he creado nada con él.

+0

no reemplaza a hacer, pero lo hace CMake reemplazar Autotools muy bien – jturcotte

2

Cook es otra herramienta que se puede utilizar para reemplazar la marca. He visto a varias grandes compañías usándolo. Por lo tanto, está listo para la empresa a pesar de que el sitio web parece bastante anticuado.

http://miller.emu.id.au/pmiller/software/cook/

+0

utilizo Cocine todo el tiempo para mis pequeños proyectos personales. Lo que me gusta es que puedo hacer una lista de nombres de archivos a.o, b.o, c.o, de una lista existente como a.c, b.c, c.c. Incluso hacer cosas divertidas como a1.c, b1.c, c1.c generar a2.c, b2.c, etc. Makefiles no parecen ser capaces de hacer esto. Principal inconveniente: Cook tiene su propio lenguaje, por lo que no puede aprovechar las habilidades existentes en Python, Ruby, etc. – DarenW

6

Usamos Jam para un proyecto complejo de C++. Una de las ventajas es que es muy bien multiplataforma. En lugar de mí sostener abiertamente los beneficios, sólo tienen un rápido vistazo a este enlace: http://www.perforce.com/jam/jam.html

+0

Movimos el atasco de makefiles hace seis o siete años. Tomó un poco de tiempo para hacer que las cosas funcionaran, pero una vez que se terminó el trabajo inicial, ha sido continuo desde entonces. La creación de nuevos proyectos es casi trivial. –

+0

^movido atascado^movido a atasco –

15

Tome un vistazo a waf.

Creo que puede considerarlo como un reemplazo completo para make y autotools. Está basado en python. Una cosa que me gusta de waf es que el script waf en sí mismo es ~ 100kb independiente que colocas en el directorio raíz de tu proyecto. Esto está en contraste con make or rake y friends, donde el sistema de compilación debe instalarse primero. Sin embargo, debes tener python> = 2.3 instalado.

~$ ./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 lo que hace cada uno de ellos.

Para arrancar, recomiendo buscar en los archivos demos/cpp/* en la distribución fuente. También eche un vistazo al archivo doc/waf.pdf; es un documento de 12 páginas que lo pondrá rápidamente en funcionamiento.

+0

Scons también suministra una versión "sin instalación" ... con un peso de 5.5 KB ... – paxos1977

+2

5.5 KB? Prueba 2.1 * MB * !! – richq

+2

SCons también es lento como un perro. Lo he usado durante un año o más ahora y quiero pasar a Waf lo antes posible. – jkp

5

Noel Llopis ha escrito algunos artículos que comparan los sistemas de compilació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://gamesfromwithin.com/?p=104.

Conclusiones: SCons es demasiado lento ... Jam es el ganador.

+1

Ese artículo es de 2005, por lo que es bastante anticuado. – JesperE

+0

Es cierto. Sin embargo, existe la prueba más reciente de SCons, que data de finales del año pasado. Acabo de actualizar el enlace roto. –

+0

Parece que el primer enlace está muerto. – shuttle87

2

He usando SCons en un gran proyecto de C++ (en Linux y Windows), y funciona realmente bien

scons all -j8 (que compila los archivos de objeto en paralelo) es muy bueno!

1

¡Uso bakefile para mi proceso de construcción y me convertí en un gran admirador!

Nunca más tengo que escribir un Makefile, menos aún horribles scripts de autotools de GNU. Todo lo que tengo que hacer es proporcionar un archivo XML que describa los objetivos de compilación. Bakefile puede convertir esto en un Makefile que se lleva todos los (archivo de cabecera) dependencias derecha, etc, donde se pueden elegir diferentes formatos Makefile (pegar a 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 

por lo general uso la opción autoconf , y escribe los molestos guiones de autotools de GNU para mí. Tuve que adaptar el script configure.ac, de modo que configure encuentre una cierta biblioteca en cualquier sistema. Pero no fue tan malo. Obtener los scripts de autoconf de esta manera es bueno, porque no tengo que escribirlos todos por mi cuenta, y cuando distribuyo mi proyecto parecerá que los escribí, y los usuarios aún pueden construir mi proyecto en el dios. dado paso, con

./configure && make && make install 
+0

Parece que este proyecto ya no se mantiene activamente? – sivabudh

Cuestiones relacionadas