C ++ dengan lintas platform dan dependensi

C ++ masih digunakan tidak hanya untuk menulis sistem operasi, game, dan driver, tetapi juga untuk utilitas baris perintah intensif sumber daya. Sementara itu, kompetitor di arena ini, seperti Rust, menawarkan sistem build dengan manajer ketergantungan default. Untuk C ++, secara de facto, ada juga sistem build CMake standar, tetapi bagaimana cara menghubungkan pustaka eksternal tanpa kesulitan? Ingatlah bahwa untuk banyak teknologi canggih ada sesuatu seperti https://start.yourtechnology.io halaman yang membuat proyek standar dasar agar tidak membuang waktu pada konfigurasi boilerplate. Artikel ini membahas pola seperti itu untuk membuat proyek C ++ dengan manajer ketergantungan vcpkg.





Mengapa vcpkg?

Pertama, karena keinginan untuk menyederhanakan proyek dasar sebanyak mungkin dan mengurangi jumlah file konfigurasi di dalamnya. Untuk C ++, ada Conan pengelola paket lanjutan , tetapi memerlukan penambahan file conanfile.txt



, dan vcpkg mengelola satu standar CMakeLists.txt



. Kedua, vcpkg sudah mapan dan memiliki dukungan stabil dari Microsoft.





1. Menyiapkan rantai alat untuk bekerja

Pertama-tama, kita membutuhkan CMake dan manajer ketergantungan vcpkg itu sendiri, Anda dapat menginstalnya melalui manajer paket favorit Anda (misalnya brew install vcpkg



), atau membuatnya secara manual dari sini .





2. Menginstal dependensi

Periksa apakah perpustakaan yang diperlukan tersedia

vcpkg search yourdepname





Instal

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