Share via


버전 관리 참조

버전 관리를 사용하면 매니페스트 파일 내에서 프로젝트에서 사용하는 종속성의 정확한 수정 버전을 결정적으로 제어할 수 있습니다. 버전 관리 기능은 매니페스트 모드 사용자만 사용할 수 있습니다.

vcpkg 버전 관리 알고리즘 및 상위 수준 개념에 대한 자세한 내용은 버전 관리 개념을 참조 하세요.

컨텍스트가 있는 예제는 버전 관리 시작 가이드 를 참조하세요.

버전 구성표

vcpkg의 포트는 패키지 작성자가 사용하는 버전 관리 규칙을 따라야 합니다. 이러한 이유로 패키지의 버전을 선언할 때 적절한 체계를 사용해야 합니다.

각 버전 관리 체계는 유효한 버전 문자열이 무엇인지에 대한 자체 규칙을 정의하며, 더 중요한 것은 동일한 체계를 사용하여 버전을 정렬하는 방법에 대한 규칙입니다.

vcpkg에서 이해하는 버전 관리 체계는 다음과 같습니다.

매니페스트 속성 버전 관리 체계
version 점으로 구분된 숫자 버전의 경우
version-semver SemVer 규격 버전의 경우
version-date 형식의 날짜 YYYY-MM-DD
version-string 임의의 문자열의 경우

매니페스트에는 하나의 버전 선언만 포함되어야 합니다.

참고 항목

기본적으로 vcpkg는 다른 체계를 사용하는 버전을 비교하지 않습니다. 예를 들어 변환이 version-string: 7.1.3 명확해 보이는 경우에도 동일한 패키지를 사용하여 version: 7.1.4패키지와 비교할 수 없습니다.

version

점 구분된 셈버와 유사한 구성표를 따르는 버전 문자열을 허용합니다.

버전은 논리적으로 도트 구분(.) 숫자 섹션으로 구성됩니다. 각 섹션에는 선행 0이 없는 정수 양의 숫자가 포함되어야 합니다.

이 버전 관리 체계의 정규식 패턴은 다음과 같습니다. (0|[1-9]\d*)(\.(0|[1-9]\d*))*

정렬 동작: 두 버전을 비교할 때 각 섹션은 첫 번째 차이점이 발견될 때까지 왼쪽에서 오른쪽으로 숫자 값으로 비교됩니다. 가장 작은 섹션 집합이 있는 버전은 이전의 모든 섹션이 동일하게 비교된다는 점을 감안할 때 더 큰 섹션 집합이 있는 다른 버전보다 우선합니다.

예시:

0 < 0.1 < 0.1.0 < 1 < 1.0.0 < 1.0.1 < 1.1< 2.0.0

version-semver

의미 체계 버전 관리 사양에 설명된 대로 의미 체계 버전 관리 규칙을 따르는 버전 문자열을 허용합니다.

정렬 동작: 문자열은 의미 체계 버전 관리 사양에 설명된 규칙에 따라 정렬됩니다.

예시:

1.0.0-1 < 1.0.0-alpha < 1.0.0-beta < 1.0.0 < 1.0.1 < 1.1.0

version-date

ISO-8601 형식에 따라 날짜로 구문 분석할 수 있는 버전 문자열을 허용합니다 YYYY-MM-DD. 명확성 식별자는 선행 0이 없는 점 구분, 양수, 정수 숫자 형식으로 허용됩니다.

이는 설정된 릴리스 버전이 없는 "LIVE at HEAD" 라이브러리에 권장되는 버전 관리 체계입니다.

이 버전 관리 체계의 정규식 패턴은 다음과 같습니다. \d{4}-\d{2}-\d{2}(\.(0|[1-9]\d*))*

정렬 동작: 문자열은 먼저 날짜 부분별로 정렬된 다음, 명확성 식별자의 숫자 비교를 기준으로 정렬됩니다. 명확성 식별자는 완화된(version) 체계의 규칙을 따릅니다.

예제: 2021-01-01<2021-01-01.1<2021-02-01.1.2<2021-02-01.1.3<2021-02-01

version-string

다른 스키마에 맞지 않는 버전 문자열을 사용하는 패키지의 경우 대부분의 임의 문자열을 허용합니다. # 포트 버전을 나타내는 데 사용되는 버전은 허용되지 않습니다.

정렬 동작: 버전 문자열 자체에서 정렬을 시도하지 않습니다. 그러나 문자열이 정확히 일치하는 경우 해당 포트 버전을 비교하고 정렬할 수 있습니다.

예:

  • apple <> orange <> orange.2 <> orange2
  • watermelon#0< watermelon#1

port-version

포트 버전은 업스트림 라이브러리 버전을 변경하지 않고 패키징 파일(vcpkg.jsonportfile.cmake등)의 변경 내용을 추적합니다.

포트 버전은 음수가 아닌 정수 값입니다.

포트 버전에 대한 규칙은 다음과 같습니다.

  • 포트의 원래 버전에 대해 0부터 시작합니다.
  • 패키지의 버전을 늘리지 않는 포트에 대한 vcpkg별 변경이 수행 될 때마다 1씩 증가합니다.
  • 패키지 버전을 업데이트할 때마다 0으로 다시 설정합니다.

참고 항목

vcpkg는 텍스트 형식 <version>#<port version>을 따릅니다. 예를 들어 1.2.0#2 버전 1.2.0 포트 버전을 2의미합니다. 포트 버전이 0#0 면 접미사가 생략됩니다(예: 1.2.0 버전 1.2.0 포트 버전을 0의미함).

정렬 동작: 두 버전이 동일하게 비교되는 경우 해당 포트 버전을 숫자 값과 비교하면 더 낮은 포트 버전이 우선합니다.

예:

  • 1.2.0 < 1.2.0#1 < 1.2.0#2 < 1.2.0#10
  • 2021-01-01#20 < 2021-01-01.1
  • windows#7 < windows#8

버전 제약 조건

기준

기준은 고려할 버전에 대한 전역 버전 층을 정의합니다. 이를 통해 최상위 매니페스트는 직접 "version>=" 제약 조건을 개별적으로 지정할 필요 없이 종속성의 전체 그래프를 최신 상태로 유지할 수 있습니다.

구성된 모든 레지스트리에는 연결된 기준이 있습니다. 레지스트리를 구성하지 않는 매니페스트의 "builtin-baseline" 경우 필드는 기본 제공 레지스트리에 대한 기준을 정의합니다. 매니페스트가 레지스트리를 구성하지 않고 레지스트리가 없는 "builtin-baseline"경우 설치는 클래식 모드 알고리즘에 따라 작동하고 모든 버전 관리 정보를 무시합니다.

다른 레지스트리 설정과 마찬가지로 기준은 종속성으로 사용되는 포트에서 무시됩니다. 전이적 버전 확인 중에 최소 버전이 필요한 경우 포트에서 사용해야 "version>="합니다.

예시

{
  "name": "project",
  "version": "1.0.0",
  "dependencies": ["zlib", "fmt"],
  "builtin-baseline":"9fd3bd594f41afb8747e20f6ac9619f26f333cbe"
}

초기 "builtin-baseline"항목을 추가하려면 .를 사용합니다 vcpkg x-update-baseline --add-initial-baseline. 매니페스트의 기준을 업데이트하려면 .를 사용합니다 vcpkg x-update-baseline.

version>=

최소 버전 요구 사항을 나타내고 선언 version>= 은 종속성을 충족하는 데 사용할 수 있는 버전에 더 낮은 경계를 적용합니다.

참고 항목

vcpkg는 모든 제약 조건과 일치하는 가장 낮은 버전을 선택하므로 제약 조건보다 작을 필요는 없습니다.

예시:

{
  "name": "project",
  "version-semver": "1.0.0",
  "dependencies": [
    { "name": "zlib", "version>=": "1.2.11#9" },
    { "name": "fmt", "version>=": "7.1.3#1" }
  ],
  "builtin-baseline":"3426db05b996481ca31e95fff3734cf23e0f51bc"
}

버전 제약 조건 선언의 일부로 접미사를 #<port-version>추가하여 포트 버전을 지정할 수 있습니다. 이전 예제 1.2.11#9 에서는 버전 1.2.11 포트 버전을 9참조합니다.

overrides

재정의를 선언하면 vcpkg가 다른 모든 버전 제약 조건을 무시하고 재정의에 지정된 버전을 사용합니다. 정확한 버전을 고정하고 버전 충돌을 해결하는 데 유용합니다.

재정의는 패키지 버전 선언의 배열로 선언됩니다.

재정의를 적용하려면 재정의된 패키지가 종속성 그래프 일부를 구성해야 합니다. 즉, 종속성은 최상위 매니페스트에 의해 선언되거나 전이적 종속성의 일부여야 합니다.

{
  "name": "project",
  "version-semver": "1.0.0",
  "dependencies": [
    "curl",
    { "name": "zlib", "version>=": "1.2.11#9" },
    "fmt"
  ],
  "builtin-baseline":"3426db05b996481ca31e95fff3734cf23e0f51bc",
  "overrides": [
    { "name": "fmt", "version": "6.0.0" },
    { "name": "openssl", "version": "1.1.1h#3" }
  ]
}