C ++ com plataforma cruzada e dependências

C ++ ainda é usado não apenas para escrever sistemas operacionais, jogos e drivers, mas também para utilitários de linha de comando que consomem muitos recursos. Enquanto isso, os concorrentes nessa área, como o Rust, oferecem um sistema de construção com um gerenciador de dependência padrão. Para C ++, de fato, há também um sistema de compilação CMake padrão, mas como conectar bibliotecas externas sem dor? Lembre-se de que, para muitas tecnologias avançadas, existe algo como uma página https://start.yourtechnology.io que cria um projeto padrão básico para não perder tempo com configurações padronizadas. Este artigo discute esse padrão para criar projetos C ++ com o gerenciador de dependência vcpkg.





Por que vcpkg?

Primeiro, devido ao desejo de simplificar o projeto base o máximo possível e reduzir o número de arquivos de configuração nele. Para C ++, existe outro gerenciador de pacotes avançado Conan , mas requer a adição de um arquivo conanfile.txt



, e o vcpkg gerencia um padrão CMakeLists.txt



. Em segundo lugar, o vcpkg está bem estabelecido e tem suporte estável da Microsoft.





1. Configurando o conjunto de ferramentas para o trabalho

Em primeiro lugar, precisamos do CMake e do próprio gerenciador de dependência vcpkg, você pode instalá-lo por meio de seu gerenciador de pacotes favorito (por exemplo brew install vcpkg



) ou compilá-lo manualmente a partir daqui .





2. Instalando dependências

Verifique se a biblioteca necessária está disponível

vcpkg search yourdepname





Instalar

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