Sistema de compilación portátil en C++ [cerrado]


Estoy buscando un sistema de construcción portátil bueno y fácil de mantener para proyectos C++. Las plataformas principales deben incluir Windows (Visual Studio 8+) y Linux (gcc); Cygwin puede ser una ventaja. Estamos considerando dos posibilidades principales: CMake y Boost.Jam . Los SCons también pueden ser una opción, pero aún no lo he investigado. Haz y aumenta.Jam parece tener los siguientes rasgos:

CMake:

  • (+) genera "makefile" nativo (solución para Windows, proyecto para Eclipse)
  • (+) extensiones para pruebas y embalaje
  • ( - ) exige un archivo de configuración en cada carpeta de proyecto
  • ( - ) basado en un lenguaje peculiar demasiado detallado

Aumentar.Jam:

  • construye por sí mismo sin pasos intermedios
  • ( - ) no genera soluciones/proyectos nativos
  • (+) lenguaje conciso similar al makefile clásico
  • (+) soporte intuitivo para propiedades como multihilo y biblioteca estática / dinámica

¿Cuáles son otras posibilidades y qué es realmente preferible después de la experiencia? ¿Qué sistemas de construcción pueden crear una solución en el camino?

Author: Ilia Barahovski, 2010-07-28

4 answers

( - ) exige un archivo de configuración en cada carpeta del proyecto

Esto no es correcto, solo tienes que pasar caminos más grandes como:

add_program(foo src/foo.cpp src/main.cpp)

Pocas notas, sobre Boost.Jam-primero no es Boost.Jam-bjam por sí solo bastante inútil, lo que estás buscando es Boost.Build, que es un conjunto de macros Jam que hacen que bjam sea útil.

Ahora, trabajé con ambos, y debo admitir, Boost.Build no es adecuado para ningún proyecto serio fuera del Boost en sí. Necesito encontrar la biblioteca? No puede necesitar encontrar encabezado? No puede. Necesita hacer algo fuera de la construcción simple , y no tiene idea de cómo hacerlo como documentación de BB... Totalmente inútil y tal vez cubrir el 10% de BB. Así que la mayoría de los casos es necesario hacer preguntas en las listas de correo BB y...

Así que, si tienes algún proyecto complicado - y necesitas hacer algo más que simple compilar y enlazar, mantente alejado de Boost.Construir.

Así que si necesita apoyar MSVC me parece hoy CMake como solo factible opción.

No digo que CMake sea un sistema muy bueno, tiene muchos problemas pero es algo principalmente adecuado para el desarrollo multiplataforma (si necesita soporte MSVC).

Y si no te importa MSVC y feliz con MinGW... echa un vistazo a autotools también.

Acerca de Scons - es aún menos maduro ellos CMake.

 16
Author: Artyom,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-28 08:14:52

Esto es un poco de diatriba, pero voy a tratar de ser objetivo y solo informar de mis experiencias:

He probado CMake en varias ocasiones y estoy cerca de llegar a un punto en el que me ofreceré como voluntario para mantener archivos de proyecto separados para cada entorno de compilación o abusar del sistema de compilación de otro lenguaje (Ant, NAnt, MSBuild o así) para compilar y empaquetar mis proyectos de C++.

CMake, tal como es:

  • Reemplaza un formato feo, pero formalizado (Makefile) con un increíblemente formato libre mal diseñado (CMakeLists.txt)
  • Vuelca su configuración, caché y otro desorden en todos los directorios sin ningún respeto por los intentos del usuario de mantener limpio el árbol de fuentes.
  • La documentación para CMake se carece en la mayoría de los lugares (por ejemplo, intente agregar recursivamente un directorio de origen a un destino excluyendo ciertos archivos para empezar)
  • Los proyectos IDE generados son increíblemente pobres (¿tiene un proyecto de Visual Studio bien estructurado? CMake volcará todas sus fuentes en un solo nodo de proyecto)
  • Los proyectos IDE generados usan rutas absolutas (por lo que no puede verificarlos en el control de código fuente everyone todo el mundo tiene que usar CMake)
  • Solo puede elegir entre plataformas (por ejemplo. x64 y x86) al generar proyectos / makefiles. CMake no generará proyectos que soporten múltiples plataformas, incluso si el IDE estaría perfectamente bien con esto.
  • Muy poco control sobre cómo se hace referencia a las bibliotecas. Hay una matriz de referencia métodos de búsqueda (por lo que incluso con un control deficiente, no se puede esperar uniformidad alguna).

Mi opinión personal es que incluso si uno quisiera diseñar intencionalmente el peor sistema de compilación multiplataforma posible, sería difícil hacer algo peor que CMake.

No tengo ninguna experiencia con Boost.Construir y bien puede tener deficiencias igualmente drásticas, pero lo mejor que puedo decir sobre CMake es que si su único cuidado es conseguir algunos archivos fuente construidos de alguna manera , puede haga el trabajo albeit aunque con mucho dolor para los desarrolladores y los consumidores de la biblioteca/aplicación.

 14
Author: Cygon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-05-25 10:35:46

He tenido algunas buenas experiencias con premake4: http://industriousone.com/premake

Actualización

Todavía me gusta premake, pero después de trabajar con él un tiempo, me siento obligado a enumerar algunas de las deficiencias que he encontrado en él:

  • No se admite la integración de nuevas cadenas de herramientas (es decir, herramientas de preprocesamiento como bison o moc).
  • No hay soporte para la configuración por archivo.
  • La búsqueda de bibliotecas es inflexible, no hay soporte para scripting o comprobación de versiones.
  • Algunas directivas (por ejemplo, configuración) afectan a las instrucciones siguientes, pero no hay una delimitación explícita del alcance. Esto puede conducir a errores sutiles.
  • Poco soporte para depurar la configuración, en otras palabras, mostrar cómo se está interpretando la configuración, aparte de examinar los scripts de compilación generados o ejecutarlos.
  • Al menos para los Makefiles de gmake, no hay opción para hacer rutas absolutas. Esto no funciona bien con quickfix de Vim, aunque es fácil trabajar alrededor.
  • Lento ritmo de desarrollo. Las nuevas características pueden estar en desarrollo durante años.
 9
Author: ergosys,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-07-21 17:37:31

Seguiré a @Akusete en QMake, que es mi herramienta personal de elección por ahora. Pros y contras son un poco personales también, pero aquí están:

Ventajas:

  • Mucho lenguaje de escritura conciser, comparado con CMake;
  • Puede generar tanto proyectos VS como makefiles compatibles con jom en Windows;
  • Agregar cadenas de herramientas para, por ejemplo, la compilación cruzada es bastante fácil (se reduce a un mkspec personalizado, que está escrito en el mismo qmake idioma);

Contras:

  • Un poco limitada la libertad de hacer un número arbitrario de objetivos. Hay algunos predefinidos, como app, lib etc., pero es un poco engorroso construir, digamos, versiones de bibliotecas compartidas y estáticas en una sola pasada, o deshabilitar el encabezado precompilado para un solo archivo de origen. Definitivamente es alcanzable, pero requiere un poco de googleo y se ve sucio;
  • Atado a Qt por defecto (que es fácilmente anulado por la adición de QT -= core gui línea)

En general:

Hace el trabajo rápido en proyectos simples a medianos, pero aún deja la sensación de "¡maldición, podría haberse hecho de una manera más simple!" cuando se aplica a tareas complejas.

 5
Author: vines,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-24 00:04:46