クロスプラットフォームと依存関係を持つC ++

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++ . !








All Articles