Quisiera algunos consejos sobre la organización de un conjunto de proyectos C ++ relacionados pero independientes almacenados en un único repositorio (git). Los proyectos usan CMake.
Para un ejemplo simplificado, imaginamos 2 proyectos A y B, A dependiendo de B. La mayoría de las personas que desarrollan A obtendrán B a través del sistema de empaque. Por lo tanto, solo compilarán A. Sin embargo, debemos permitir que los desarrolladores compilen tanto A como B (e instalarlo), por separado o en conjunto.
Aquí hay una propuesta:
└── Repo1
├── CMakeLists.txt (1)
├── A
│ ├── CMakeLists.txt (2)
│ ├── include
│ │ ├── aaa.h
│ │ ├── aaaa.h
│ │ └── CMakeLists.txt (3)
│ └── src
│ ├── aaa.cpp
│ ├── aaaa.cpp
│ └── CMakeLists.txt (4)
├── B
│ ├── CMakeLists.txt (2)
│ ├── include
│ │ ├── bbb.h
│ │ ├── bbbb.h
│ │ └── CMakeLists.txt (3)
│ └── src
│ ├── bbb.cpp
│ ├── bbbb.cpp
│ └── CMakeLists.txt (4)
└── test
├── CMakeLists.txt (5)
└── testaaaa.cpp
(1) Defina las variables comunes de cmake para todos los proyectos (si corresponde) e incluye los subdirectorios. (2) Define el proyecto en sí y las variables de cmake requeridas del proyecto. (3) Define los encabezados para instalar y los necesarios para la compilación. (4) Configura la biblioteca y los binarios. (5) Configura los ejecutables de prueba y los casos de prueba.
Según tengo entendido, cada proyecto debe producir un archivo XXXConfig.cmake e instalarlo en / usr / local / share / cmake. Escribir estos archivos parece bastante complicado al leer la documentación de CMake.
Qué piensas ? ¿Tiene sentido la estructura?
¿Tienes un ejemplo funcional de un conjunto de proyectos así?
CMakeLists.txt
archivo por proyecto:A/CMakeLists.txt
(la aplicación) incluyeB/CMakeLists.txt
(la biblioteca) usandoadd_subdirectory(...)
.Respuestas:
Después de leer y probar bastante, hice un proyecto básico de demostración de C ++ que demuestra el uso de CMake, CTest + boost.test, CPack y Doxygen y utilizo más o menos la organización que mencioné en mi pregunta.
El proyecto muestra cómo hacer dependencias de subproyectos, cómo compilar todo el repositorio o solo un subproyecto, cómo empaquetar, cómo probar y cómo producir documentación.
Ver aquí: https://github.com/Barthelemy/CppProjectTemplate
fuente