CMake 프로젝트의 vcpkg

vcpkg는 CMake와 원활하게 통합되어 설치된 패키지를 프로젝트에서 자동으로 사용할 수 있도록 합니다. vcpkg가 통합되는 메커니즘은 CMake 도구 체인 파일을 제공하는 것입니다.

CMake가 프로젝트를 처음 구성할 때 내부 검색 루틴을 실행하여 실행 가능한 도구 체인 (컴파일러, 링커 등)을 찾습니다. 이 검색은 .의 project() 함수 내에서 발생합니다 CMakeLists.txt.

도구 체인 선택 프로세스를 사용자 지정하기 위해 CMake는 도구 체인 파일이라고 하는 사용자 지정 CMake 언어 스크립트 사용을 지원합니다. 도구 체인 파일은 변수를 설정하여 지정됩니다 CMAKE_TOOLCHAIN_FILE . CMake는 제공된 도구 체인 스크립트의 콘텐츠를 평가하고 그에 따라 변수 정의, 필요한 빌드 도구 경로 및 기타 빌드 매개 변수(예: 교차 컴파일 플래그)를 설정합니다.

vcpkg 도구 체인(<vcpkg-root>/scripts/buildsystems/vcpkg.cmake)을 사용하도록 설정 CMAKE_TOOLCHAIN_FILE 하면 vcpkg는 도구 체인 파일 메커니즘을 활용하여 코드를 삽입하여 기본 제공 CMake 함수와 투명하게 통합합니다.

도구 체인 파일을 사용하여 삼중 변수를 사용하여 사용자 고유의 도구 집합을 VCPKG_CHAINLOAD_TOOLCHAIN_FILE 구성할 수 있습니다.

vcpkg 통합은 사용 중인 작업 모드에 따라 다르게 작동합니다.

클래식 모드에서 vcpkg는 CMake 검색 경로를 적절하게 설정하여 설치된 패키지를 , find_library()find_path() 함수를 통해 find_package()사용할 수 있도록 합니다.

매니페스트 모드에서 도구 체인은 위와 함께 매니페스트 파일(vcpkg.json파일)을 검색하고 실행 vcpkg install 하여 프로젝트의 종속성을 자동으로 획득합니다.

호출 중에 project() 도구 체인 파일이 평가되므로 vcpkg 설정을 수정하는 모든 CMake 수준 변수는 첫 번째 호출 project()전에 설정해야 합니다. ABI 해시 변경을 초래하는 vcpkg 설정을 수정하는 경우 CMake 프로젝트를 다시 구성해야 할 수도 있습니다.

CMake를 사용하여 완전히 작동하는 예제는 패키지 설치 및 사용 예제: sqlite를 참조하세요.

CMAKE_TOOLCHAIN_FILE

vcpkg 도구 체인 파일을 사용하도록 구성된 프로젝트(CMake 설정을 CMAKE_TOOLCHAIN_FILE통해)는 표준 CMake 함수를 find_package()find_path()find_library()사용하여 vcpkg에서 라이브러리를 찾을 수 있습니다.

CMake 사전 설정을 사용하여 도구 체인 파일을 지정하는 것이 좋습니다. 예를 들어 환경 변수 VCPKG_ROOT를 정의한 경우 다음 CMakePresets.json 을 사용하고 구성 줄을 전달할 --preset debug 수 있습니다.

{
  "version": 2,

  "configurePresets": [
    {
      "name": "debug",
      "cacheVariables": {
        "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
      }
    }
  ]
}
cmake -B build -S /my/project --preset debug

현재 컴퓨터와 관련된 vcpkg에 대한 절대 경로를 사용해야 하는 경우 이를 사용하여 CMakeUserPresets.json 파일에 추가할 .gitignore 수 있습니다.

{
  "version": 2,

  "configurePresets": [
    {
      "name": "debug",
      "cacheVariables": {
        "CMAKE_TOOLCHAIN_FILE": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake"
      }
    }
  ]
}

3.19보다 오래된 CMake 버전은 구성 명령줄에서 도구 체인 파일을 전달해야 합니다.

cmake ../my/project -DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake

라이브러리 사용

vcpkg는 라이브러리를 찾기 위한 CMake의 기본 메커니즘을 지원합니다. find_package()find_library()find_path() 특정 CMake 지원을 사용하여 라이브러리를 설치할 때 vcpkg는 라이브러리를 사용하는 방법에 대한 사용 정보를 표시합니다.

The package zlib is compatible with built-in CMake targets:

    find_package(ZLIB REQUIRED)
    target_link_libraries(main PRIVATE ZLIB::ZLIB)

vcpkg는 포함 또는 링크 경로를 프로젝트에 자동으로 추가하지 않습니다. 헤더 전용 라이브러리를 사용하려면 모든 플랫폼에서 올바르게 작동하는 라이브러리를 사용할 find_path() 수 있습니다.

# To find and use catch2
find_path(CATCH_INCLUDE_DIR NAMES catch.hpp PATH_SUFFIXES catch2)
target_include_directories(main PRIVATE ${CATCH_INCLUDE_DIR})

IDE 통합

Visual Studio/Visual Studio Code

Visual Studio 및 Visual Studio Code 모두에서 CMake 사전 설정을 사용하는 것이 좋습니다.

Visual Studio에서 CMake 사전 설정을 사용하여 구성 및 빌드하고 Visual Studio Code의 CMake 사전 설정을 사용하여 구성 및 빌드에 대해 자세히 알아봅니다.

CLion

도구 체인 설정(File > Settings Windows 및 Linux, CLion > Preferences macOS)을 열고 CMake 설정(Build, Execution, Deployment > CMake)으로 이동합니다. 에서 CMake options다음 줄을 추가합니다.

-DCMAKE_TOOLCHAIN_FILE=<vcpkg-root>/scripts/buildsystems/vcpkg.cmake

각 프로필에 이 줄을 별도로 추가해야 합니다.

여러 도구 체인 파일 사용

vcpkg의 도구 체인 파일을 다른 도구 체인 파일과 결합하려면 CMake 캐시 변수 VCPKG_CHAINLOAD_TOOLCHAIN_FILE를 설정할 수 있습니다.

cmake ../my/project \
   -DCMAKE_TOOLCHAIN_FILE=C:/vcpkg/scripts/buildsystems/vcpkg.cmake \
   -DVCPKG_CHAINLOAD_TOOLCHAIN_FILE=../my/project/toolchain.cmake

또는 기본 도구 체인 파일의 끝에 vcpkg 도구 체인을 포함할 수 있습니다.

# MyToolchain.cmake
set(CMAKE_CXX_COMPILER ...)
set(VCPKG_TARGET_TRIPLET x64-my-custom-windows-triplet)
include(/path/to/vcpkg/scripts/buildsystems/vcpkg.cmake)

참고 항목

vcpkg는 라이브러리를 빌드하는 동안 컴파일러 또는 컴파일 플래그와 같은 도구 체인의 설정을 자동으로 적용하지 않습니다. vcpkg의 라이브러리 설정을 변경하려면 사용자 지정 삼중자 파일을 만들어야 합니다(도구 체인을 공유할 수 있습니다)**

설정 참조

명령줄 또는 set() 문을 통해 '맵'"cacheVariables"과 같은 CMakePresets.json첫 번째 project() 지시문 앞에 모든 vcpkg 영향을 주는 변수를 정의해야 합니다.

VCPKG_TARGET_TRIPLET

이 설정은 라이브러리를 설치하고 사용할 삼중 vcpkg를 제어합니다.

설정되지 않은 경우 vcpkg는 현재 컴파일러 설정에 따라 적절한 기본 트리플렛을 자동으로 검색합니다. 이 CMake 변수를 변경하는 경우 캐시를 삭제하고 다시 구성해야 합니다.

VCPKG_HOST_TRIPLET

이 변수는 설치할 세 배 호스트 종속성을 제어합니다.

설정되지 않은 경우 vcpkg는 적절한 네이티브 트리플렛(x64-windows, x64-osx, x64-linux)을 자동으로 검색합니다.

호스트 종속성도 참조하세요.

VCPKG_INSTALLED_DIR

이 변수는 라이브러리를 설치하고 사용할 위치를 설정합니다.

매니페스트 모드에서 기본값은 .입니다 ${CMAKE_BINARY_DIR}/vcpkg_installed.

클래식 모드에서 기본값은 .입니다 ${VCPKG_ROOT}/installed.

VCPKG_MANIFEST_MODE

이 변수는 vcpkg가 매니페스트 모드 또는 클래식 모드에서 작동하도록 합니다.

기본값은 ON 비어 있거나 ${CMAKE_SOURCE_DIR}/vcpkg.json 존재하지 않는 경우 VCPKG_MANIFEST_DIR 로 설정됩니다.

검색되는 동안 매니페스트 모드를 vcpkg.json 사용하지 않도록 설정하려면 다음으로 OFF설정합니다.

VCPKG_MANIFEST_DIR

이 변수는 매니페스트를 포함하는 대체 폴더를 vcpkg.json 지정합니다.

기본값은 ${CMAKE_SOURCE_DIR} 존재하는 경우 ${CMAKE_SOURCE_DIR}/vcpkg.json 입니다.

VCPKG_MANIFEST_INSTALL

이 변수는 구성 단계 중에 vcpkg를 자동으로 실행하여 종속성을 설치할지 여부를 제어합니다.

기본값은 ON if VCPKG_MANIFEST_MODE 입니다 ON.

VCPKG_BOOTSTRAP_OPTIONS

이 변수는 전달할 ./bootstrap-vcpkg추가 명령 매개 변수로 설정할 수 있습니다.

매니페스트 모드에서는 실행 파일이 없는 경우 vcpkg가 자동으로 부트스트랩됩니다.

VCPKG_OVERLAY_TRIPLETS

이 변수는 명령줄에서 다음과 같이 전달할 경로 목록으로 설정할 수 있습니다. --overlay-triplets=...

VCPKG_OVERLAY_PORTS

이 변수는 명령줄에서 다음과 같이 전달할 경로 목록으로 설정할 수 있습니다. --overlay-ports=...

VCPKG_MANIFEST_FEATURES

이 변수는 매니페스트에서 설치할 때 활성화할 기능 목록으로 설정할 수 있습니다.

예를 들어 프로젝트에서 추가 종속성을 사용하여 빌드를 제어하여 테스트 또는 샘플을 사용하도록 설정하는 기능을 사용할 수 있습니다.

{
  "name": "mylibrary",
  "version": "1.0",
  "dependencies": [ "curl" ],
  "features": {
    "samples": {
      "description": "Build Samples",
      "dependencies": [ "fltk" ]
    },
    "tests": {
      "description": "Build Tests",
      "dependencies": [ "gtest" ]
    }
  }
}

이 설정은 CMake 사전 설정에서 "cacheVariables" 직접 제어하거나 다른 설정에 따라 간접적으로 제어할 수 있습니다.

# CMakeLists.txt

option(BUILD_TESTING "Build tests" OFF)
if(BUILD_TESTING)
  list(APPEND VCPKG_MANIFEST_FEATURES "tests")
endif()

option(BUILD_SAMPLES "Build samples" OFF)
if(BUILD_SAMPLES)
  list(APPEND VCPKG_MANIFEST_FEATURES "samples")
endif()

project(myapp)

# ...

VCPKG_MANIFEST_NO_DEFAULT_FEATURES

이 변수는 에 나열된 기능 외에도 기본 기능의 활성화를 제어합니다 VCPKG_MANIFEST_FEATURES. 설정 ON하면 기본 기능이 자동으로 활성화되지 않습니다.

기본값은 OFF입니다.

VCPKG_INSTALL_OPTIONS

이 변수는 자동 설치 중에 vcpkg 도구에 전달할 추가 명령줄 매개 변수 목록으로 설정할 수 있습니다.

VCPKG_PREFER_SYSTEM_LIBS

이 기능은 더 이상 사용되지 않습니다. 대신 빈 오버레이 포트를 사용합니다.

이 변수는 vcpkg가 해당 경로를 CMAKE_PREFIX_PATHCMAKE_LIBRARY_PATH 앞에 추가하는 대신 추가할지 여부를 제어하고 CMAKE_FIND_ROOT_PATH 도구 체인/시스템 라이브러리/패키지 후에 vcpkg 라이브러리/패키지를 찾을 수 있도록 합니다.

기본값은 OFF입니다.

VCPKG_FEATURE_FLAGS

이 변수는 자동 설치 중에 vcpkg 도구에 전달할 기능 플래그 목록으로 설정하여 실험적 동작에 옵트인할 수 있습니다.

--feature-flags= 자세한 내용은 명령줄 옵션을 참조하세요.

VCPKG_TRACE_FIND_PACKAGE

ON설정하면 모든 호출을 인쇄합니다 find_package. 중첩된 호출(예: via find_dependency)은 중첩 깊이에 따라 들여쓰기됩니다.