다음을 통해 공유


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"
  ]
}

이 예제에서는 , cpprestsdklibxml2및 를 사용하는 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"

추가 사용자 지정 없이 합리적인 동작에 필요한 기능 집합입니다.

다음 중 하나일 경우 기본 기능이 자동으로 선택됩니다.

  1. 포트에 대한 포트-포트 종속성에는 "default-features": true 기본값이 있습니다.
  2. 최상위 매니페스트에는 포트에 대한 "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 개체는 다음 필드가 있는 개체입니다.

단순 문자열은 .에 해당하는 유효한 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)"
}