C ++ est toujours utilisé non seulement pour l'écriture de systèmes d'exploitation, de jeux et de pilotes, mais également pour les utilitaires de ligne de commande gourmands en ressources. Pendant ce temps, les concurrents dans ce domaine, tels que Rust, proposent un système de construction avec un gestionnaire de dépendances par défaut. Pour C ++, de facto, il existe également un système de construction CMake standard, mais comment connecter des bibliothèques externes sans douleur? Rappelez-vous que pour de nombreuses technologies avancées, il existe quelque chose comme une page https://start.yourtechnology.io qui crée un projet standard de base afin de ne pas perdre de temps sur une configuration passe-partout. Cet article décrit un tel modèle pour la création de projets C ++ avec le gestionnaire de dépendances vcpkg.
Pourquoi vcpkg?
Tout d'abord, parce que vous souhaitez simplifier au maximum le projet de base et réduire le nombre de fichiers de configuration qu'il contient. Pour C ++, il existe un autre gestionnaire de packages avancé Conan , mais il nécessite l'ajout d'un fichier conanfile.txt
et vcpkg en gère un standard CMakeLists.txt
. Deuxièmement, vcpkg est bien établi et bénéficie d'un support stable de Microsoft.
1. Configuration de la chaîne d'outils pour le travail
Tout d'abord, nous avons besoin de CMake et du gestionnaire de dépendances vcpkg lui-même, vous pouvez l'installer via votre gestionnaire de paquets préféré (par exemple brew install vcpkg
), ou le construire manuellement à partir d'ici .
2. Installation des dépendances
Vérifiez si la bibliothèque requise est disponible
vcpkg search yourdepname
Installer
vcpkg install yourdepname
, , , , vcpkg . , , :
vcpkg install catch2
vcpkg install cli11
vcpkg install fmt
, , vcpkg CMakeLists.txt
CMakeLists.txt
? , vcpkg:
cmake_minimum_required(VERSION 3.17)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
project(proj)
file(GLOB proj_sources src/*.cpp)
add_executable(proj ${proj_sources})
find_package(fmt CONFIG REQUIRED)
target_link_libraries(proj PRIVATE fmt::fmt fmt::fmt-header-only)
find_package(CLI11 CONFIG REQUIRED)
target_link_libraries(proj PRIVATE CLI11::CLI11)
project(test)
#[[Changing the entry point for tests]]
list(FILTER proj_sources EXCLUDE REGEX ".*Main.cpp$")
file(GLOB test_sources test/*.cpp)
add_executable(test ${proj_sources} ${test_sources})
find_package(Catch2 CONFIG REQUIRED)
target_link_libraries(test PRIVATE Catch2::Catch2)
target_link_libraries(test PRIVATE CLI11::CLI11)
target_link_libraries(test PRIVATE fmt::fmt fmt::fmt-header-only)
3.
, CMake , ? IDE, CMake options vcpkg integrate install
IDE , CMake :
cmake `vcpkg integrate install | tail -1 | cut -d \"` -f2 -DCMAKE_BUILD_TYPE=Release -G "Unix Makefiles" -B cmake-build-release
Windows, `` , vcpkg integrate install
, :
cmake --build cmake-build-release --target all
vcpkg install [...]
.
++ 21 . GitHub , . , "Use this template" .
c C++ . !