C ++ todavía se usa no solo para escribir sistemas operativos, juegos y controladores, sino también para utilidades de línea de comandos que consumen muchos recursos. Mientras tanto, los competidores en este campo, como Rust, ofrecen un sistema de compilación con un administrador de dependencias predeterminado. Para C ++, de facto, también hay un sistema de compilación CMake estándar, pero ¿cómo conectar bibliotecas externas sin problemas? Recuerde que para muchas tecnologías avanzadas existe algo así como una página https://start.yourtechnology.io que crea un proyecto estándar básico para no perder tiempo en la configuración estándar. Este artículo analiza este patrón para crear proyectos C ++ con el administrador de dependencias vcpkg.
¿Por qué vcpkg?
Primero, debido al deseo de simplificar el proyecto base tanto como sea posible y reducir la cantidad de archivos de configuración que contiene. Para C ++, hay otro administrador de paquetes avanzado, Conan , pero requiere agregar un archivo conanfile.txt
, y vcpkg administra uno estándar CMakeLists.txt
. En segundo lugar, vcpkg está bien establecido y cuenta con un soporte estable de Microsoft.
1. Configuración de la cadena de herramientas para el trabajo
En primer lugar, necesitamos CMake y el propio administrador de dependencias vcpkg, puede instalarlo a través de su administrador de paquetes favorito (por ejemplo brew install vcpkg
) o compilarlo manualmente desde aquí .
2. Instalación de dependencias
Compruebe si la biblioteca requerida está disponible
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++ . !