Digamos que tengo un proyecto de C ++ que se divide en varios subproyectos. Todos los subproyectos producen una DLL y diferentes equipos de desarrolladores trabajan en cada uno de los subproyectos. Ahora bien, si quiero construir el proyecto principal, ¿hay alguna manera de evitar tener que construir todos los subproyectos por mí mismo?
En resumen, estoy buscando algo que haga la gestión de dependencias (es decir, para archivos binarios y encabezados) de manera similar a como lo hace Maven para Java.
De hecho, traté de usar Maven para esto, pero esto es bastante engorroso porque tengo que crear los paquetes manualmente y con bastante frecuencia, Maven no capta los cambios más recientes. Además, ejecutar la compilación es un poco complicado, ya que tengo que llamar a NAnt desde Maven (uso la función de NAnt para crear soluciones de Visual Studio directamente).
¿Alguna sugerencia e idea de cómo hacer esto?
fuente
maven
, se está perdiendo todo el puntomaven
, o hace 10 años, cuando no estaba usandomaven
para C ++, era mucho menos útil para C ++. No puedo hablar de 2009, pero en los últimos años, por experiencia,maven
es exactamente lo que usaría para el problema que está describiendo. Hace exactamente lo que quiere, y de manera bastante eficiente y bien, y no hace las cosas negativas que dice que hace. Cualquiera que lea esto en 2019 o después debería considerar seriamente usarlomaven
para este propósito.Respuestas:
Respuesta inicial : Sugeriría usar CMake. Es un generador de archivos make multiplataforma (también genera proyectos de Visual Studio o Eclipse CDT).
http://www.cmake.org/
Tuve una muy buena experiencia con eso. Lo mejor que me gustó fue la capacidad de producir una estructura de proyecto genérica. Por lo tanto, puede incluir de forma genérica la búsqueda de subproyectos para pruebas unitarias, etc. sin cambiar el script cada vez.
También tienen muchos módulos sobre cómo encontrar bibliotecas de compilación preinstaladas, necesarias para el proyecto (como Boost, QT, etc.)
Actualización : Mientras tanto, se hicieron algunos esfuerzos para introducir la administración de paquetes para C ++. Algunos proyectos que vale la pena considerar:
Tenga en cuenta que, como lo señaló @RAM en los comentarios, cpm ya no se mantiene activamente.
fuente
Para la gestión de dependencias existe un nuevo proyecto (es una startup) que está implementando este tipo de herramienta: https://github.com/biicode (un gestor de dependencias C ++). Puede agregar sus dependencias y debería funcionar.
Actualmente, el nombre del proyecto es conan.io , fueron adquiridos por JFrog .
ACTUALIZACIÓN: El proyecto está muerto ... Desafortunadamente, parece que la startup no pudo obtener suficientes clientes de pago premium, pero el servidor parece estar funcionando bien ...
ACTUALIZACIÓN2: Parece que hay un proyecto sustituto: conan.io (gracias @mucaho)
fuente
Recomiendo los siguientes sistemas de compilación de alto nivel:
fuente
Si solo desea la administración de dependencias, pruebe Ivy , se integra muy bien con Ant (y supongo que NAnt puede hacer lo mismo en base a este blog , que está vinculado desde el sitio de Ivy).
También existe Byldan , una versión .Net de Maven. Sin embargo, no sé qué tan bien funcionará para usted.
fuente
Make y GCC son una gran combinación para una comprobación de dependencias realmente buena.
GCC puede generar archivos de dependencia 'make' automáticamente (cambio de línea de comandos -MD), para poder reconstruir todos los archivos fuente que dependen de un encabezado dado, por ejemplo.
Tengo algunas reglas simples que corto y pego en mis archivos MAKE:
Ahora, si sus archivos de objeto se declaran en, digamos, una lista OBJ_C y OBJ_CPP:
Por supuesto, Make puede realizar un seguimiento de las dependencias con otros proyectos y similares, por ejemplo, también reconstruyendo una biblioteca compartida según sea necesario.
Por ejemplo, si sus otros equipos siempre colocan sus archivos DLL más recientes en alguna carpeta compartida:
fuente
${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o $@
Me costó analizar todos estos símbolos Make, parece que esto se resuelve en algo así comog++ -c main.cc -MD -MF test
si desea ejecutarlo de forma independiente en la línea de comando, y coloca los resultados en un archivo llamado 'prueba'.Editar:
Biicode está en desuso
Alternativa: Conan.io
fuente
Recomiendo Conan , que estaba usando estos días. Es muy poderoso mantener todas las bibliotecas y binarios dependientes en su proyecto.
fuente
Puede crear el paquete NuGet para las bibliotecas usadas y usar NuGet para la administración de dependencias.
Consulte también NuGet para C ++
fuente
Hay una serie de herramientas encima de SCons, que proporcionan una funcionalidad de nivel superior similar a la de Autotools, que intenta facilitar la vida de los desarrolladores (por ejemplo, WAF, SNOCS). Desafortunadamente, SCons en sí tiene el mayor inconveniente: mayor tiempo de compilación para los proyectos grandes.
Puedo recomendar probar SNOCS (que es un SCons invertido) para aquellos de ustedes que buscan una gestión de dependencias fácil y eligen opciones de compilación en el comando único (compilador, x86 / x64, Debug / Release, bibliotecas estáticas / compartidas, prueba / instalar destinos, etc.).
SNOCS también intenta abordar el problema del tiempo de compilación prolongado almacenando la salida de la configuración del proyecto en archivos separados, lo que permite que las compilaciones consiguientes omitan la fase de configuración por completo y vayan directamente a la fase de construcción (la última característica está en construcción ahora)
La configuración de CMake se vuelve tediosa en soluciones más grandes, por lo que el mantenimiento del sistema de compilación requiere una gran fracción del tiempo del desarrollador. Afortunadamente, como ya mencionó Martijn, existe un biicode que "usa CMake para generar su proyecto con sus dependencias".
fuente
Tratar SCons
SCons es una herramienta de construcción de software de código abierto, es decir, una herramienta de construcción de próxima generación. Piense en SCons como un sustituto multiplataforma mejorado de la clásica utilidad Make con funcionalidad integrada similar a autoconf / automake y cachés de compiladores como ccache. En resumen, SCons es una forma más fácil, confiable y rápida de crear software.
fuente
Recomiendo usar la madre de todos los sistemas de dependencia de compilación: make.
fuente
Prueba los scons, te engancharán. Make está desactualizado, es difícil y costoso de mantener.
fuente