vcpkg.json 참조
vcpkg에서 매니페스트를 사용하는 방법에 대한 개요는 매니페스트 모드를 참조하세요.
매니페스트는 엄격한 JSON 문서입니다. C++스타일 주석(//
) 또는 후행 쉼표는 포함할 수 없습니다. 그러나 잘 정의된 키 집합이 있는 모든 개체에 메모를 작성하기 위해 시작하는 $
필드 이름을 사용할 수 있습니다. 이러한 주석 필드는 사용자 정의 키(예: "features"
)를 허용하는 개체에서 허용되지 않습니다.
최신 JSON 스키마는 .에서 https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json사용할 수 있습니다. Visual Studio 및 Visual Studio Code와 같은 JSON 스키마 지원을 사용하는 IDE는 이 파일을 사용하여 자동 완성 및 구문 검사를 제공할 수 있습니다. 대부분의 IDE의 경우 이 URL로 vcpkg.json
설정 "$schema"
해야 합니다.
예시
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
"dependencies": [
"boost-system",
{
"name": "cpprestsdk",
"default-features": false
},
"libxml2",
"yajl"
]
}
이 예제에서는 , cpprestsdk
libxml2
및 를 사용하는 boost-system
애플리케이션에 대한 매니페스트를 보여 줍니다yajl
. 이 예제에는 더 나은 IDE 유효성 검사 및 자동 완성을 사용하도록 설정하는 참조도 포함되어 $schema
있습니다.
최상위 필드
속성 | 필수 | Type | 설명 |
---|---|---|---|
builtin-baseline | 아니요 | string | 최상위 수준으로 빌드할 때 사용할 버전 핀 |
default-features | 아니요 | Feature Object[] | 기본적으로 나열된 기능 필요 |
dependencies | 아니요 | 종속성[] | 이 프로젝트를 빌드하고 사용하는 데 필요한 종속성 목록 |
description | 라이브러리 | string 또는 string[] | 프로젝트 설명 |
설명서 | 아니요 | string | 업스트림 프로젝트의 설명서에 대한 URI |
features | 아니요 | {string: Feature} | 프로젝트 사용자가 사용할 수 있는 선택적 기능 |
홈페이지 | 아니요 | string | 업스트림 프로젝트의 홈페이지에 대한 URI |
license | 아니요 | 문자열 또는 null | SPDX 라이선스 식 |
유지 관리자 | 아니요 | string 또는 string[] | 패키지 파일의 유지 관리 |
이름 | 라이브러리 | string | 프로젝트 이름 |
재정의 | 아니요 | 재정의[] | 최상위 수준으로 빌드할 때 사용할 버전 핀 |
port-version | 아니요 | 정수 | 포트 파일 수정 |
지원 | 아니요 | 플랫폼 식 | 지원되는 플랫폼 및 빌드 구성 |
버전 version-semver version-date version-string |
라이브러리 | string | 업스트림 버전 정보 |
"builtin-baseline"
기본 레지스트리에서 "baseline"
버전 확인용을 지정하는 바로 가기입니다. 문자열입니다. 선택 사항으로, 최상위 프로젝트에서만 사용됩니다.
이 필드는 매니페스트에 https://github.com/microsoft/vcpkg 대한 전역 최소 버전 정보를 제공하는 커밋을 나타냅니다. 지정된 "default-registry"
없이 버전 관리를 사용하는 최상위 매니페스트 파일에 필요합니다. 기본 레지스트리를 정의하는 것과 동일한 의미 체계를 가짐:
{
"default-registry": {
"kind": "builtin",
"baseline": "<value>"
}
}
자세한 의미 체계는 버전 관리 및 레지스트리 사용을 참조하세요.
"default-features"
추가 사용자 지정 없이 합리적인 동작에 필요한 기능 집합입니다.
다음 중 하나일 경우 기본 기능이 자동으로 선택됩니다.
- 포트에 대한 포트-포트 종속성에는
"default-features": true
기본값이 있습니다. - 최상위 매니페스트에는 포트에 대한
"default-features": false
종속성이 없습니다.
기본 기능은 최상위 프로젝트에서 알 수 없는 전이적 종속성에 대해 "기본" 구성을 제공하는 특정 사례를 처리합니다. 다른 사용자가 사용하는 포트는 거의 항상 해당 종속성에 사용해야 "default-features": false
합니다.
기능 개체를 사용하여 플랫폼별 기본 기능을 정의할 수 있습니다.
{
"name": "my-port",
"default-features": [
"png",
{
"name": "winssl",
"platform": "windows"
}
]
}
기능에 대한 자세한 내용은 참조 "features"
하세요.
"description"
포트에 대한 설명입니다. 문자열 또는 문자열 배열입니다. 라이브러리에 필요하며 최상위 프로젝트의 경우 선택 사항입니다.
이는 사용자가 라이브러리를 또는 find
명령의 일부로 검색하고 라이브러리가 search
수행하는 작업을 학습하는 데 사용됩니다.
"dependencies"
프로젝트에 필요한 종속성 목록입니다. 종속성 개체의 배열입니다. 선택 사항.
이 필드에는 라이브러리 또는 애플리케이션을 빌드하고 사용하는 데 필요한 모든 종속성이 나열됩니다.
포트 종속성 예제
"dependencies": [
{
"name": "arrow",
"default-features": false,
"features": [
"json",
{
"name": "mimalloc",
"platform": "windows"
}
]
},
"boost-asio",
"openssl",
{
"name": "picosha2",
"platform": "!windows"
}
]
"documentation"
업스트림 프로젝트의 설명서에 대한 URI입니다. 문자열입니다. 선택 사항.
"features"
프로젝트 사용자가 사용할 수 있는 기능입니다. Feature 개체에 대한 이름 맵입니다. 선택 사항.
기능은 빌드에 추가 동작 및 종속성을 추가하는 부울 플래그입니다. 기능에 대한 자세한 내용은 매니페스트 개념 설명서를 참조하세요.
"homepage"
프로젝트의 홈페이지에 대한 URI입니다. 문자열입니다. 선택 사항.
"license"
프로젝트의 SPDX 짧은 라이선스 식입니다. 문자열 또는 null입니다. 선택 사항.
"license"
SPDX 3.19 라이선스 식이거나 사용자가 배포된 /share/<port>/copyright
파일을 읽어야 함을 나타내야 합니다null
. DocumentRefs는 지원되지 않습니다.
참고 항목
vcpkg 레지스트리의 각 패키지에 대해 제공되는 라이선스 정보는 Microsoft가 라이선스 요구 사항을 가장 잘 이해했음을 나타냅니다. 그러나 이 정보는 확정적이지 않을 수 있습니다. 사용자는 사용하려는 각 패키지에 대한 정확한 라이선스 요구 사항을 확인하는 것이 좋습니다. 이는 궁극적으로 해당 라이선스를 준수해야 하는 책임입니다.
예제 라이선스 문자열
MIT
LGPL-2.1-only AND BSD-2-Clause
GPL-2.0-or-later WITH Bison-exception-2.2
EBNF
vcpkg는 다음 EBNF 를 사용하여 라이선스 필드를 구문 분석합니다.
idchar = ? regex /[-.a-zA-Z0-9]/ ?
idstring = ( idchar ), { idchar } ;
(* note that unrecognized license and license exception IDs will be warned against *)
license-id = idstring ;
license-exception-id = idstring ;
(* note that DocumentRefs are unsupported by this implementation *)
license-ref = "LicenseRef-", idstring ;
with = [ whitespace ], "WITH", [ whitespace ] ;
and = [ whitespace ], "AND", [ whitespace ] ;
or = [ whitespace ], "OR", [ whitespace ] ;
simple-expression = [ whitespace ], (
| license-id
| license-id, "+"
| license-ref
), [ whitespace ] ;
(* the following are split up from compound-expression to make precedence obvious *)
parenthesized-expression =
| simple-expression
| [ whitespace ], "(", or-expression, ")", [ whitespace ] ;
with-expression =
| parenthesized-expression
| simple-expression, with, license-exception-id, [ whitespace ] ;
(* note: "a AND b OR c" gets parsed as "(a AND b) OR c" *)
and-expression = with-expression, { and, with-expression } ;
or-expression = and-expression, { or, and-exression } ;
license-expression = or-expression ;
"maintainers"
패키지 유지 관리자 목록입니다. 문자열 또는 문자열 배열입니다. 선택 사항.
"Givenname Surname<email>" 형식을 사용하는 것이 좋습니다.
"name"
프로젝트의 이름입니다. 문자열입니다. 라이브러리에 필요하며 최상위 프로젝트의 경우 선택 사항입니다.
이름은 소문자 ASCII 문자, 숫자 또는 하이픈(-
)이어야 합니다. 하이픈으로 시작하거나 끝내서는 안 됩니다. 라이브러리는 조직 또는 프레임워크 이름을 접두사로 msft-
포함하거나 boost-
사용자가 연결된 라이브러리를 찾고 설명하는 데 도움이 되는 것이 좋습니다.
예를 들어 공식 이름을 가진 라이브러리에 이름이 Boost.Asio
boost-asio
지정될 수 있습니다.
"overrides"
특정 종속성에 사용할 정확한 버전 핀입니다. 재정의 개체의 배열입니다. 선택 사항.
"overrides"
전이적 매니페스트에서(즉, 종속성에서) 무시됩니다. 최상위 프로젝트에서 정의한 재정의만 사용됩니다.
속성 | 필수 | Type | Description |
---|---|---|---|
name | 예 | string | 포트 이름 |
version | 예 | string | 고정할 업스트림 버전 정보입니다. |
version-semver version-date version-string |
예 | string | 특정 스키마의 이름을 지정하는 version 데 사용되지 않는 대안입니다. |
port-version | 아니요 | 정수 | 고정할 포트 파일 수정 버전입니다. 버전 자체에 배치되기 위해 사용되지 않습니다. |
"port-version"
에 접미사"version"
로 #N
지정해야 합니다. 예를 들어 "version": "1.2.3#7"
이름 버전 1.2.3, 포트 버전 7.
더 많은 의미 체계 세부 정보는 버전 관리도 참조하세요.
버전 재정의의 예
"overrides": [
{
"name": "arrow", "version": "1.2.3#7"
},
{
"name": "openssl", "version": "1.1.1h#3"
}
]
"port-version"
패키징 파일의 수정 버전을 구분하는 버전 접미사입니다. 정수입니다. 기본값은 0
입니다.
"port-version"
업스트림 원본 버전을 변경하지 않는 새 버전의 포트가 게시될 때마다 증가해야 합니다. 업스트림 원본 버전이 변경 되면 버전 필드 가 변경되고 "port-version"
다시 설정 0
(또는 제거)되어야 합니다.
자세한 내용은 버전 지정을 참조하세요.
"supports"
지원되는 플랫폼 및 빌드 구성 플랫폼 식입니다. 선택 사항.
이 필드는 프로젝트가 특정 플랫폼 구성에서 성공적으로 빌드되거나 실행되지 않을 것으로 예상되는 것을 설명합니다.
예를 들어 라이브러리에서 Linux 빌드를 지원하지 않는 경우 사용합니다 "supports": "!linux"
.
"vcpkg-configuration"
파일 내에 vcpkg 구성 속성을 포함할 수 있습니다 vcpkg.json
. 속성 내의 vcpkg-configuration
모든 항목은 파일에 정의된 vcpkg-configuration.json
것처럼 처리됩니다. 자세한 내용은 설명서를 참조하세요 vcpkg-configuration.json
.
vcpkg-configuration
또한 파일이 있는 vcpkg.json
동안 vcpkg-configuration.json
정의된 파일은 허용되지 않으며 오류 메시지와 함께 vcpkg 명령이 종료됩니다.
포함된 예제 vcpkg-configuration
{
"name": "test",
"version": "1.0.0",
"dependencies": [ "beison", "zlib" ],
"vcpkg-configuration": {
"registries": [
{
"kind": "git",
"baseline": "768f6a3ad9f9b6c4c2ff390137690cf26e3c3453",
"repository": "https://github.com/microsoft/vcpkg-docs",
"reference": "vcpkg-registry",
"packages": [ "beicode", "beison" ]
}
],
"overlay-ports": [ "./my-ports/fmt",
"./team-ports"
]
}
"version"
, "version-semver"
, "version-date"
"version-string"
업스트림 프로젝트의 버전입니다. 문자열입니다. 라이브러리에 필요하며 최상위 프로젝트의 경우 선택 사항입니다.
매니페스트에는 최대 하나의 버전 필드가 포함되어야 합니다. 각 버전 필드는 다른 버전 관리 체계에 해당합니다.
"version"
- 완화 된 의미 체계 버전 2.0.0, 기본 숫자 3개 이하 허용 예:1.2.3.4.10-alpha1
"version-semver"
- 엄격한 의미 체계 버전 2.0.0. 예:2.0.1-rc5
"version-date"
- 선택적 후행 점 구분 숫자 시퀀스와 같이YYYY-MM-DD
서식이 지정된 날짜입니다. 숫자 릴리스가 없는 패키지에 사용됩니다(예: Live-at-HEAD). 예:2022-12-09.314562
"version-string"
- 임의의 문자열입니다. 정렬 가능한 버전이 없는 패키지에 사용됩니다. 이는 거의 사용되지 않아야 하지만 다른 버전 필드가 도입되기 전에 만들어진 모든 포트는 이 체계를 사용합니다.
자세한 내용은 버전 지정을 참조하세요.
종속성 필드
각 종속성은 다음 필드가 있는 문자열 또는 개체입니다.
속성 | 필수 | Type | 설명 |
---|---|---|---|
default-features | 아니요 | bool | 기본적으로 나열된 기능 필요 |
features | 아니요 | Feature Object[] | 필요한 추가 기능 목록 |
host | 아니요 | bool | 대상 대신 호스트 컴퓨터에 대한 종속성 필요 |
이름 | 예 | string | 종속성의 이름 |
platform | 아니요 | 플랫폼 식 | 종속성을 사용할 플랫폼에 대한 한정자 |
version>= | 아니요 | string | 최소 필수 버전입니다. 포트 버전은 이름 포트 버전 7과 같은 1.2.3#7 접미사로 #N 식별됩니다. |
문자열은 문자열 값에 정의된 이름을 가진 개체로 해석됩니다.
종속성: "default-features"
프로젝트가 종속성의 '기본값' 기능에 종속됨을 나타내는 부울입니다. 기본값은 true
입니다.
대부분의 경우 이를 정의 false
해야 하며 필요한 모든 기능을 명시적으로 따라야 합니다.
종속성: "features"
필요한 추가 기능 목록입니다. Feature 개체의 배열입니다. 선택 사항.
Feature 개체는 다음 필드가 있는 개체입니다.
name
- 기능의 이름입니다. 문자열입니다. 필수입니다.platform
- 기능이 필요한 플랫폼을 제한하는 플랫폼 식입니다. 선택 사항.
단순 문자열은 .에 해당하는 유효한 Feature Object
문자열이기도 합니다 { "name": "<feature-name>" }
.
예를 들면 다음과 같습니다.
{
"name": "ffmpeg",
"default-features": false,
"features": [
"mp3lame",
{
"name": "avisynthplus",
"platform": "windows"
}
]
}
ffmpeg
mp3 인코딩 지원과 함께 라이브러리를 사용합니다. Windows에서만 avisynthplus
지원이 사용하도록 설정됩니다.
종속성: "host"
현재 포트의 삼중항 대신 호스트 트리플릿에 대한 종속성을 빌드해야 함을 나타내는 부울입니다. 기본값은 false
입니다.
빌드 중에 "실행"해야 하는 도구 또는 스크립트(예: 빌드 시스템, 코드 생성기 또는 도우미)를 제공하는 모든 종속성은 다음과 같이 "host": true
표시되어야 합니다. 이렇게 하면 대상에 대해 컴파일하는 경우와 같이 대상이 실행 가능하지 않은 경우 올바른 교차 컴파일이 arm64-android
가능합니다.
자세한 내용은 호스트 종속성을 참조하세요.
종속성: "name"
종속성의 이름입니다. 문자열입니다. 필수입니다.
프로젝트의 속성과 동일한 제한 사항을 "name"
따릅니다.
종속성: "platform"
종속성이 필요한 플랫폼을 제한하는 식입니다. 플랫폼 식입니다. 선택 사항.
식이 현재 구성과 일치하지 않으면 종속성이 사용되지 않습니다. 예를 들어 종속성이 있는 "platform": "!windows"
경우 비 Windows 시스템을 대상으로 하는 경우에만 필요합니다.
종속성: "version>="
종속성에 대한 최소 버전 제약 조건입니다.
이 필드는 필요에 따라 접미사를 사용하여 #N
필요한 경우 최소 포트 버전을 지정하는 종속성의 최소 버전을 지정합니다.
버전 관리 의미 체계에 대한 자세한 내용은 버전 관리를 참조 하세요.
기능 필드
각 기능은 다음 필드가 있는 개체입니다.
속성 | 필수 | Type | 설명 |
---|---|---|---|
description | 예 | string | 기능에 대한 설명 |
dependencies | 아니요 | 종속성[] | 종속성 목록 |
지원 | 아니요 | 플랫폼 식 | 기능이 지원하는 플랫폼 및 구성에 대한 한정자 |
license | 아니요 | 문자열 또는 null | SPDX 라이선스 식 |
기능의 개념적 개요는 매니페스트 모드 설명서를 확인하세요.
기능이 있는 예제 포트
{
"features": {
"cbor": {
"description": "The CBOR backend",
"dependencies": [
{
"$explanation": [
"This is how you tell vcpkg that the cbor feature depends on the json feature of this package"
],
"name": "libdb",
"default-features": false,
"features": [ "json" ]
}
]
},
"csv": {
"description": "The CSV backend",
"dependencies": [
"fast-cpp-csv-parser"
]
},
"json": {
"description": "The JSON backend",
"dependencies": [
"jsoncons"
]
}
}
}
기능: "dependencies"
기능에 필요한 종속성 목록입니다. 종속성 개체의 배열입니다. 선택 사항.
이 필드에는 기능을 빌드하고 사용하는 데 필요한 추가 종속성이 나열되어 있습니다.
기능: "description"
기능에 대한 설명입니다. 문자열 또는 문자열 배열입니다. 필수입니다.
이 기능은 사용자가 기능 또는 find
명령의 search
일부로 검색하고 기능이 수행하는 작업을 학습하는 데 사용됩니다.
기능: "supports"
지원되는 플랫폼 및 기능에 대한 빌드 구성입니다. 플랫폼 식입니다. 선택 사항.
이 필드는 기능이 성공적으로 빌드되고 실행되는 플랫폼 구성을 문서화합니다.
기능: "license"
기능의 SPDX 짧은 라이선스 식입니다. 문자열 또는 null입니다. 선택 사항. 제공되지 않은 경우 라이선스는 최상위 라이선스 필드에 지정된 것과 동일합니다.
참고 항목
vcpkg 레지스트리의 각 패키지에 대해 제공되는 라이선스 정보는 Microsoft가 라이선스 요구 사항을 가장 잘 이해했음을 나타냅니다. 그러나 이 정보는 확정적이지 않을 수 있습니다. 사용자는 사용하려는 각 패키지에 대한 정확한 라이선스 요구 사항을 확인하는 것이 좋습니다. 이는 궁극적으로 해당 라이선스를 준수해야 하는 책임입니다.
플랫폼 식
플랫폼 식은 종속성이 필요한 시기 또는 라이브러리 또는 기능을 빌드해야 하는 시기를 설명하는 JSON 문자열입니다.
식은 기본 식별자, 논리 연산자 및 그룹화에서 작성됩니다.
!<expr>
,not <expr>
- 부정<expr>|<expr>
,<expr>,<expr>
- 논리적 OR(키워드or
는 예약되어 있지만 플랫폼 식에서는 유효하지 않음)<expr>&<expr>
,<expr> and <expr>
- 논리적 AND(<expr>)
- 그룹화/우선 순위
다음 식별자는 삼중 설정 및 빌드 구성에 따라 정의됩니다.
식별자 | 삼중 조건 |
---|---|
x64 |
VCPKG_TARGET_ARCHITECTURE == "x64" |
x86 |
VCPKG_TARGET_ARCHITECTURE == "x86" |
arm |
VCPKG_TARGET_ARCHITECTURE == "arm" 또는VCPKG_TARGET_ARCHITECTURE == "arm64" |
arm32 |
VCPKG_TARGET_ARCHITECTURE == "arm" |
arm64 |
VCPKG_TARGET_ARCHITECTURE == "arm64" |
arm64ec |
VCPKG_TARGET_ARCHITECTURE == "arm64ec" |
wasm32 |
VCPKG_TARGET_ARCHITECTURE == "wasm32" |
mips64 |
VCPKG_TARGET_ARCHITECTURE == "mips64" |
windows |
VCPKG_CMAKE_SYSTEM_NAME == "" 또는VCPKG_CMAKE_SYSTEM_NAME == "WindowsStore" VCPKG_CMAKE_SYSTEM_NAME == "MinGW" |
mingw |
VCPKG_CMAKE_SYSTEM_NAME == "MinGW" |
uwp |
VCPKG_CMAKE_SYSTEM_NAME == "WindowsStore" |
xbox |
VCPKG_CMAKE_SYSTEM_NAME == "" 가 정의되어 있습니다XBOX_CONSOLE_TARGET . |
linux |
VCPKG_CMAKE_SYSTEM_NAME == "Linux" |
osx |
VCPKG_CMAKE_SYSTEM_NAME == "Darwin" |
ios |
VCPKG_CMAKE_SYSTEM_NAME == "iOS" |
freebsd |
VCPKG_CMAKE_SYSTEM_NAME == "FreeBSD" |
openbsd |
VCPKG_CMAKE_SYSTEM_NAME == "OpenBSD" |
android |
VCPKG_CMAKE_SYSTEM_NAME == "Android" |
emscripten |
VCPKG_CMAKE_SYSTEM_NAME == "Emscripten" |
qnx |
VCPKG_CMAKE_SYSTEM_NAME == "QNX" |
vxworks |
VCPKG_CMAKE_SYSTEM_NAME == "VxWorks" |
static |
VCPKG_LIBRARY_LINKAGE == "static" |
staticcrt |
VCPKG_CRT_LINKAGE == "static" |
native |
TARGET_TRIPLET == HOST_TRIPLET |
플랫폼 식 예제
- Windows가 아닌 경우 sha256이 필요
picosha2
하지만 Windows의 OS에서 가져와야 합니다(BCrypt).
{
"name": "picosha2",
"platform": "!windows"
}
- arm64 Windows 및 amd64 Linux에서 zlib 필요
{
"name": "zlib",
"platform": "(windows & arm64) | (linux & x64)"
}
vcpkg