매니페스트 모드란?
vcpkg에는 클래식 모드와 매니페스트 모드의 두 가지 작업 모드 가 있습니다. 대부분의 사용자에게 매니페스트 모드를 사용하는 것이 좋습니다.
매니페스트 모드는 선언적 JSON 파일을 사용하여 프로젝트 또는 패키지에 대한 메타데이터를 설명합니다. 매니페스트 파일은 이름이 있어야 합니다 vcpkg.json
.
매니페스트 모드는 작업 디렉터리에 매니페스트 파일(vcpkg.json
)이 있는 동안 명령을 실행 vcpkg install
하여 작동합니다. 매니페스트 모드에서 패키지를 설치하는 방법에 대한 자세한 내용은 미리 읽어보십시오.
매니페스트 모드는 버전 관리 및 사용자 지정 레지스트리와 같은 고급 기능을 사용하는 데도 필요합니다.
모든 vcpkg 포트에는 설치하는 vcpkg.json
패키지에 대한 메타데이터를 설명하는 파일이 포함되어야 합니다.
vcpkg는 종속성 트리 계산, 이름 또는 설명으로 패키지 검색, 기능 확인 등과 같은 다양한 용도로 패키지 매니페스트의 메타데이터를 사용합니다.
{
"name": "fmt",
"version": "10.1.1",
"description": "Formatting library for C++. It can be used as a safe alternative to printf or as a fast alternative to IOStreams.",
"homepage": "https://github.com/fmtlib/fmt",
"license": "MIT",
"dependencies": [
{
"name": "vcpkg-cmake",
"host": true
},
{
"name": "vcpkg-cmake-config",
"host": true
}
]
}
프로젝트에서 매니페스트 파일을 사용하는 주요 목적은 종속성을 선언하는 것입니다. 프로젝트 매니페스트를 사용하는 경우 버전 제약 조건 및 재정의를 지정하여 특정 버전의 종속성을 잠글 수 있습니다. 이 기능은 클래식 모드에서 사용할 수 없습니다.
{
"dependencies": [ "fmt", "zlib" ],
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"overrides": [
{ "name": "zlib", "version": "1.2.8" }
]
}
파일을 통해 vcpkg를 vcpkg-configuration.json
구성하여 더 많은 패키지 레지스트리 또는 오버레이 포트 및 삼중항 위치를 추가할 수 있습니다 .
{
"default-registry": {
"kind": "git",
"baseline": "7476f0d4e77d3333fbb249657df8251c28c4faae",
"repository": "https://github.com/microsoft/vcpkg"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/microsoft/vcpkg-docs",
"reference": "vcpkg-registry",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"packages": [ "beicode", "beison" ]
}
],
"overlay-ports": [
"C:\\dev\\my_vcpkg_ports"
]
}
매니페스트 파일을 사용하여 패키지를 설치하려면 패키지 인수 없이 명령을 사용합니다 vcpkg install
.
매니페스트(vcpkg.json
) 파일이 포함된 디렉터리 또는 옵션을 사용하여 --x-manifest-root=<path>
제공된 매니페스트 파일의 경로에서 명령을 실행해야 합니다.
매니페스트 모드에 설치된 패키지는 클래식 모드에서와 마찬가지로 전역 installed
디렉터리에 설치되지 않습니다. 대신 각 매니페스트는 이름이 고유한 vcpkg_installed
vcpkg_installed
설치 디렉터리를 가져옵니다. 디렉터리가 매니페스트 파일을 포함하는 동일한 디렉터리에 만들어집니다.
매니페스트당 독립적인 설치 트리를 사용하면 서로 다른 프로젝트 간에 종속성을 분리할 수 있습니다. 이렇게 하면 클래식 모드의 중요한 제한을 피할 수 있으며, 각 포트의 버전 하나만 설치할 수 있습니다. 매니페스트 모드는 프로젝트별로 구분된 포트 버전을 유지합니다.
매니페스트 파일은 "기능"을 사용하여 기능, 동작 및 종속성의 추가 집합을 정의할 수 있습니다.
프로젝트에서 프로젝트의 일부에 적용되는 종속성을 사용하거나 사용하지 않도록 설정하는 기능을 정의할 수 있습니다. 예를 들어 프로젝트에 여러 구성 요소가 포함된 경우 공통 종속성을 "dependencies"
목록에 유지하지만 다른 일부는 해당 구성 요소로 제한할 수 있습니다.
프로젝트의 기능을 사용하도록 설정하려면 다음 방법 중 하나를 사용할 수 있습니다.
--x-feature
명령에 옵션을 전달합니다vpckg install
.- CMake에서 첫 번째 호출
project()
전VCPKG_MANIFEST_FEATURES
을 설정합니다. - MSBuild에서 'VcpkgAdditionalInstallOptions'를 통해 옵션을 전달
--x-feature
합니다.
{
"name": "my-game",
"dependencies": [ "grpc" ],
"features": {
"client": {
"description": "client game executable",
"dependencies": [ "sdl2", "bullet3" ]
},
"server": {
"description": "multiplayer server executable",
"dependencies": [ "proxygen" ]
},
"tests": {
"description": "development tests",
"dependencies": [ "gtest" ]
}
}
}
"클라이언트" 구성 요소의 종속성만 빌드하려면 다음을 실행합니다.
vcpkg install --x-feature=client
다음에 시도할 몇 가지 작업은 다음과 같습니다.
- 매니페스트 모드 자습서 완료
- 다음을 읽습니다.
vcpkg.json
vcpkg-configuration.json
참조 문서입니다. - 버전 관리를 사용하여 반복 가능한 빌드에 대한 버전 잠금
vcpkg 피드백
vcpkg은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.