Una plantilla rápida de C++ para proyectos CMake modernos, cuyo objetivo es ser un punto de partida fácil de usar.
Esta es mi opinión personal sobre este tipo de plantilla, por lo que es posible que no utilice las mejores prácticas o que usted no esté de acuerdo con cómo hago las cosas. ¡Cualquier comentario es muy apreciado!
Configuración y proyecto de CMake moderno, que, hasta donde yo sé, utiliza las mejores prácticas,
Un ejemplo de configuración Clang-Format , inspirada en el modelo base de Google , con pequeños ajustes. Esto es sólo un punto de partida, ya que el estilo de codificación es una cuestión subjetiva, cada uno es libre de eliminarlo (para el valor predeterminado de LLVM ) o proporcionar su propia alternativa.
Integración de analizadores estáticos , con Clang-Tidy y Cppcheck , siendo el primero la opción por defecto,
Soporte de Doxygen , a través de la opción ENABLE_DOXYGEN
, que puedes habilitar si deseas utilizarla,
Soporte de pruebas unitarias , a través de GoogleTest (con una opción para habilitar GoogleMock ) o Catch2 ,
Cobertura de código , habilitada mediante el uso de la opción ENABLE_CODE_COVERAGE
, a través de la integración de Codecov CI,
Soporte de administrador de paquetes , con Conan y Vcpkg , a través de sus respectivas opciones
Flujos de trabajo de CI para Windows, Linux y MacOS utilizando GitHub Actions , haciendo uso de las funciones de almacenamiento en caché, para garantizar un tiempo de ejecución mínimo.
Plantillas .md para: README , pautas de contribución , problemas y solicitudes de extracción ,
Licencia permisiva para permitirle integrarlo lo más fácilmente posible. La plantilla tiene licencia sin licencia,
Opciones para construir como una biblioteca de solo encabezado o ejecutable, no solo una biblioteca estática o compartida.
Integración de Ccache , para acelerar los tiempos de reconstrucción
Estas instrucciones le permitirán obtener una copia del proyecto en funcionamiento en su máquina local para fines de desarrollo y prueba.
Este proyecto pretende ser sólo una plantilla, por lo que las versiones del software utilizado se pueden cambiar para adaptarse mejor a las necesidades de los desarrolladores. Si desea utilizar la plantilla tal cual , es decir, utilizar las versiones recomendadas aquí, necesitará:
CMake v3.15+ : encontrado en https://cmake.org/
Compilador de C++ : debe admitir al menos el estándar C++ 17 , es decir, MSVC , GCC , Clang
Nota: También debe poder proporcionar a CMake un generador compatible.
Es bastante fácil instalar el proyecto, todo lo que necesita hacer es clonarlo desde GitHub o generar un nuevo repositorio a partir de él (también en GitHub ).
Si desea clonar el repositorio, en lugar de generarlo a partir de él, simplemente necesita ejecutar:
git clone https://github.com/filipdutescu/modern-cpp-template/
Después de terminar de obtener una copia del proyecto, con cualquiera de los métodos anteriores, cree una nueva carpeta en la carpeta include/
, con el nombre de su proyecto. Edite cmake/SourcesAndHeaders.cmake
para agregar sus archivos.
También deberá cambiar el nombre del archivo cmake/ProjectConfig.cmake.in
para comenzar con el nombre exacto de su proyecto . Como cmake/MyNewProjectConfig.cmake.in
. También debe realizar los mismos cambios en los flujos de trabajo de GitHub proporcionados, en particular .github/workflows/ubuntu.yml
, en el que debe reemplazar la opción CMake -DProject_ENABLE_CODE_COVERAGE=1
por -DMyNewProject_ENABLE_CODE_COVERAGE=1
.
Finalmente, cambie "Project"
de CMakeLists.txt
, de
project (
"Project"
VERSION 0.1.0
LANGUAGES CXX
)
al nombre exacto de tu proyecto , es decir, usando el nombre anterior quedará:
project (
MyNewProject
VERSION 0.1.0
LANGUAGES CXX
)
Para instalar un proyecto ya creado, debe ejecutar el destino install
con CMake. Por ejemplo:
cmake --build build --target install --config Release
# a more general syntax for that command is:
cmake --build < build_directory > --target install --config < desired_config >
Para construir el proyecto, todo lo que necesita hacer, después de instalarlo correctamente , es ejecutar una rutina CMake similar a la siguiente:
mkdir build/ && cd build/
cmake .. -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory
cmake --build . --target install
Nota: El
CMAKE_INSTALL_PREFIX
personalizado se puede omitir si desea instalar en la ubicación de instalación predeterminada.
Puede encontrar más opciones que puede configurar para el proyecto en el archivo cmake/StandardSettings.cmake
. Para ciertas opciones, es posible que se necesite configuración adicional en sus respectivos archivos *.cmake
(es decir, Conan necesita CONAN_REQUIRES
y es posible que necesite configurar CONAN_OPTIONS
para que funcione correctamente; los dos están configurados en el archivo cmake/Conan.cmake
).
Para generar documentación para el proyecto, debe configurar la compilación para usar Doxygen. Esto se hace fácilmente modificando el flujo de trabajo que se muestra arriba de la siguiente manera:
mkdir build/ && cd build/
cmake .. -D < project_name > _ENABLE_DOXYGEN=1 -DCMAKE_INSTALL_PREFIX=/absolute/path/to/custom/install/directory
cmake --build . --target doxygen-docs
Nota: Esto generará un directorio
docs/
en el directorio raíz del proyecto .
De forma predeterminada, la plantilla utiliza Google Test para las pruebas unitarias. Las pruebas unitarias se pueden deshabilitar en las opciones, configurando ENABLE_UNIT_TESTING
(de cmake/StandardSettings.cmake) como falso. Para ejecutar las pruebas, simplemente use CTest, desde el directorio de compilación, pasando la configuración deseada para ejecutar las pruebas. Un ejemplo de este procedimiento es:
cd build # if not in the build directory already
ctest -C Release # or `ctest -C Debug` or any other configuration you wish to test
# you can also run tests with the `-VV` flag for a more verbose output (i.e.
# GoogleTest output as well)
Si corresponde, deberá presentarse aquí.
Si corresponde, deberá presentarse aquí.
Lea CONTRIBUTING.md para obtener detalles sobre cómo puede convertirse en colaborador y el proceso para enviarnos solicitudes de extracción.
Este proyecto utiliza SemVer para el control de versiones. Se puede encontrar una lista de las versiones existentes en los lanzamientos del proyecto.
Este proyecto tiene licencia sin licencia; consulte el archivo de LICENCIA para obtener más detalles.