C ++ wird weiterhin nicht nur zum Schreiben von Betriebssystemen, Spielen und Treibern verwendet, sondern auch für ressourcenintensive Befehlszeilenprogramme. In der Zwischenzeit bieten Konkurrenten in diesem Bereich wie Rust ein Build-System mit einem Standard-Abhängigkeitsmanager an. Für C ++ gibt es de facto auch ein Standard-CMake-Build-System, aber wie kann man externe Bibliotheken ohne Probleme verbinden? Denken Sie daran, dass es für viele fortschrittliche Technologien so etwas wie eine https: //start.yourtechnology.io-Seite gibt , die ein grundlegendes Standardprojekt erstellt, um keine Zeit mit der Konfiguration der Heizplatte zu verschwenden. Dieser Artikel beschreibt ein solches Muster zum Erstellen von C ++ - Projekten mit dem vcpkg-Abhängigkeitsmanager.
Warum vcpkg?
Erstens, weil das Basisprojekt so weit wie möglich vereinfacht und die Anzahl der darin enthaltenen Konfigurationsdateien reduziert werden soll. Für C ++ gibt es einen weiteren erweiterten Paketmanager, Conan , für den jedoch eine Datei hinzugefügt werden muss conanfile.txt
, und vcpkg verwaltet eine Standarddatei CMakeLists.txt
. Zweitens ist vcpkg gut etabliert und wird von Microsoft stabil unterstützt.
1. Einrichten der Toolchain für die Arbeit
Zunächst benötigen wir CMake und den vcpkg-Abhängigkeitsmanager selbst. Sie können ihn beispielsweise über Ihren bevorzugten Paketmanager installieren brew install vcpkg
oder von hier aus manuell erstellen .
2. Abhängigkeiten installieren
Überprüfen Sie, ob die erforderliche Bibliothek verfügbar ist.
vcpkg search yourdepname
Installieren
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++ . !