que - Maven-como la gestión de la dependencia de C++?
maven tutorial español (12)
Hay una serie de herramientas encima de SCons, que proporcionan una funcionalidad de nivel superior similar a la de las Autotools que intentan hacer que los desarrolladores sean más fáciles (por ejemplo, WAF, SNOCS). Desafortunadamente, SCons tiene el inconveniente principal: un tiempo de compilación más largo para los proyectos grandes.
Puedo recomendar probar SNOCS (que es una SCons invertida) para aquellos que buscan una administración de dependencia fácil y elegir opciones de compilación en el único comando (compilador, x86 / x64, depuración / liberación, bibliotecas estáticas / compartidas, prueba / instalar objetivos, etc.).
SNOCS también intenta abordar el largo problema de compilación almacenando los resultados de la configuración de los proyectos en los archivos separados, lo que permite que las compilaciones subsiguientes omitan la fase de configuración e ingresen directamente a la fase de construcción (la última característica está en construcción).
La configuración de CMake se vuelve tediosa en soluciones más grandes, por lo que el mantenimiento del sistema de construcción requiere una gran fracción del tiempo del desarrollador. Afortunadamente, como Martijn ya mencionó, hay un https://www.biicode.com/ que "usa CMake para generar su proyecto con sus dependencias".
Supongamos que tengo un proyecto de C ++ dividido en varios subproyectos. El subproyecto produce 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 yo solo?
En resumen, estoy buscando algo que haga la gestión de la dependencia (es decir, para los archivos binarios y los encabezados) de forma 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 de forma manual y con bastante frecuencia, Maven no se da cuenta de los cambios más recientes. Además, ejecutar la compilación es un poco complicado ya que tengo que llamar a NAnt desde Maven (utilizo la función de NAnt para crear directamente las soluciones de Visual Studio).
¿Algún consejo e idea de cómo hacer esto?
Make y GCC son una gran combinación para una buena comprobación de dependencias.
GCC puede generar automáticamente archivos de dependencia ''make'' (conmutador de línea de comandos -MD), para poder reconstruir todos los archivos de origen que dependen de un encabezado dado, por ejemplo.
Tengo algunas reglas simples que cortar y pegar en mis archivos make:
# compile c files
%.o: %.c
${CC} ${CFLAGS} -c $< -MD -MF $(<:%.c=%.dep) -o $@
# compile c++ files
%.opp: %.cpp
${CPP} ${CPPFLAGS} -c $< -MD -MF $(<:%.cpp=%.dep) -o $@
Ahora, si sus archivos de objeto están declarados, por ejemplo, en una lista OBJ_C y OBJ_CPP:
.PHONY: cleandep
cleandep:
rm -f $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep)
-include $(OBJ_C:%.o=%.dep) $(OBJ_CPP:%.opp=%.dep)
Make puede, por supuesto, rastrear las dependencias con otros proyectos, por ejemplo, reconstruir una biblioteca compartida según sea necesario.
Por ejemplo, si tus otros equipos siempre ponen sus últimas DLL en alguna carpeta compartida:
myapp: ${SRC_CPP} ${LIB_DIR}other_team.lib
...
${LIB_DIR}other_team.lib: /shared_folder/latest/other_team.lib
cp /shared_folder/latest/other_team.lib ${LIB_DIR}other_team.lib
Para la gestión de la dependencia, existe un nuevo proyecto (es una empresa de inicio) que está implementando este tipo de herramienta: https://www.biicode.com/ (un administrador de dependencias de 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á dead ... Desafortunadamente, parece que la startup no pudo obtener suficientes clientes que pagaran la prima, pero el servidor parece estar funcionando bien ...
ACTUALIZACIÓN2: Parece que hay un proyecto sustituto: conan.io (gracias @mucaho)
Prueba con Scons, estarás enganchado. Hacer es obsoleto, difícil y costoso de mantener.
Pruebe SCons
SCons es una herramienta de construcción de software de código abierto, es decir, una herramienta de compilación de próxima generación. Piense en SCons como un sustituto mejorado y multiplataforma para la utilidad clásica Make con funcionalidad integrada similar a autoconf / automake y memorias caché de compilador como ccache. En resumen, SCons es una forma más fácil, más confiable y más rápida de crear software.
Puede crear paquetes NuGet para bibliotecas usadas y usar NuGet para administración de dependencias.
Ver también, NuGet para C ++
Recomiendo conan.io , que estaba usando en estos días. Es muy poderoso mantener todas las bibliotecas y binarios dependientes en su proyecto.
Recomiendo los siguientes sistemas de compilación de alto nivel:
- Maven Nar Plugin: Usando Maven para proyectos C / C ++
- Gradle cpp plugin : Es una forma más fácil, pero actualmente está incubando, aquí las principales características y una hoja de ruta .
- conan.io es más un enfoque de C ++, es multiplataforma y es compatible con la mayoría de los sistemas de compilación de C ++.
Recomiendo usar la madre de todos los sistemas de dependencia de compilación: make.
Respuesta inicial : Sugeriría usar CMake. Es un generador de archivos make multiplataforma (también genera proyectos Visual Studio o Eclipse CDT).
Realmente tuve una buena experiencia con eso. Lo mejor que me gusta de él es la capacidad de producir una estructura de proyecto genérica. Por lo tanto, puede incluir genéricamente 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, hubo algún esfuerzo para introducir la administración de paquetes para C ++. Algunos proyectos que vale la pena mirar: