C ++は、オペレーティングシステム、ゲーム、ドライバーの作成だけでなく、リソースを大量に消費するコマンドラインユーティリティにも使用されています。一方、Rustなど、この分野の競合他社は、デフォルトの依存関係マネージャーを備えたビルドシステムを提供しています。C ++の場合、事実上、標準のCMakeビルドシステムもありますが、外部ライブラリを苦労せずに接続するにはどうすればよいですか?多くの高度なテクノロジーには、定型的な構成に時間を無駄にしないように、基本的な標準プロジェクトを作成するhttps://start.yourtechnology.ioページのようなものがあることを思い出してください。この記事では、vcpkg依存関係マネージャーを使用してC ++プロジェクトを作成するためのそのようなパターンについて説明します。
なぜvcpkg?
まず、基本プロジェクトを可能な限り単純化し、その中の構成ファイルの数を減らしたいという願望のためです。C ++の場合、別の高度なパッケージマネージャーであるConanがありますがconanfile.txt
、ファイルを追加する必要があり、vcpkgは1つの標準的なものを管理しますCMakeLists.txt
。第二に、vcpkgは十分に確立されており、Microsoftからの安定したサポートがあります。
1.作業用のツールチェーンを設定する
まず、CMakeとvcpkg依存関係マネージャー自体が必要です。お気に入りのパッケージマネージャー(たとえばbrew install vcpkg
)からインストールするか、ここから手動でビルドできます。
2.依存関係のインストール
必要なライブラリが利用可能かどうかを確認します
vcpkg search yourdepname
インストール
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++ . !