패키지 이름 확인
vcpkg는 네트워크에 연결하기 전에 각 패키지에 대한 책임 있는 레지스트리(또는 오버레이)를 결정합니다. 이렇게 하면 이름 확인이 외부 상태에 종속되지 않으므로 패키지 종속성 혼동 공격을 방지할 수 있습니다.
이름 확인 알고리즘 단계는 다음과 같습니다.
- 오버레이에 이름이 있으면 해당 오버레이를 사용합니다. 그렇지 않으면
- 가 있는 경우
"packages"
포트 이름과 일치하는 패턴은 해당 레지스트리를 사용합니다. 그렇지 않으면 - 기본 레지스트리가 아닌
null
경우 해당 레지스트리를 사용합니다. 그렇지 않으면 - 레지스트리에 대한 포트를 해결하지 못합니다.
이름과 일치하는 패턴이 여러 "packages"
개인 경우 vcpkg는 다음과 같이 우선 순위를 지정합니다.
- 정확한 일치 --
boost
항목이 선택됨boost*
- 가장 긴 패턴 --
boost*
이 선택됨b*
- 첫 번째 일치 - 최상의 패턴을 선언하는 첫 번째 레지스트리가 선택됩니다.
예제 #1: 패키지 이름 확인
vcpkg-configuration.json
{
"registries": [
{
"kind": "git",
"repository": "https://github.com/northwindtraders/vcpkg-registry",
"baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
"packages": ["bei*"]
},
{
"kind": "git",
"repository": "https://github.com/vicroms/vcpkg-registry",
"baseline": "dacf4de488094a384ca2c202b923ccc097956e0c",
"packages": ["beicode", "bei*"]
}
]
}
vcpkg.json
{
"dependencies": [
"beicode",
"beison",
"fmt"
],
"builtin-baseline": "7e7c62d863b1bf599c1d104b76cd8b74475844d4"
}
이 구성을 사용하면 각 패키지 이름이 다음으로 확인됩니다.
beicode
: 레지스트리https://github.com/vicroms/vcpkg-registry
에서(정확히 일치)beicode
beison
: 레지스트리https://github.com/northwindtraders/vcpkg-registry
에서(배열에서beison
"registries"
패턴 일치 및 선언됨)fmt
: 기본 레지스트리에서(일치 항목 없음)
여러 레지스트리가 선언 bei*
되므로 vcpkg도 경고를 내보낸다.
Found the following problems in configuration (path/to/vcpkg-configuration.json):
$ (a configuration object): warning: Package "bei*" is duplicated.
First declared in:
location: $.registries[0].packages[0]
registry: https://github.com/northwindtraders/vcpkg-registry
The following redeclarations will be ignored:
location: $.registries[1].packages[1]
registry: https://github.com/vicroms/vcpkg-registry
예제 #2: 기본 레지스트리에 여러 패턴 할당
기본 레지스트리는 두 가지 방법으로 변경할 수 있습니다. 먼저 다음을 정의합니다."default-registry"
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "e79c0d2b5d72eb3063cf32a1f7de1a9cf19930f3"
}
}
둘째, 배열의 "default-registry"
null
패턴을 설정하고 사용하여 "*"
다음을 "registries"
수행합니다.
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "e79c0d2b5d72eb3063cf32a1f7de1a9cf19930f3",
"packages": ["*"]
}
]
}
두 번째 폼의 장점은 패키지 배열에 항목을 더 추가할 수 있지만 "default-registry"
개체는 패키지 배열을 정의할 수 없다는 것입니다. 이러한 차이는 패키지가 기본 레지스트리에서 제공되는지 확인해야 하는 경우에 중요합니다.
Qt Framework 라이브러리를 제공하는 레지스트리를 살펴보겠습니다.
vcpkg-configuration.json
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "7e7c62d863b1bf599c1d104b76cd8b74475844d4"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/custom-qt/custom-qt-registry",
"baseline": "adfc4de488094a384ca2c202b923ccc097956e0c",
"packages": ["qt*"]
}
]
}
그리고 다음 프로젝트 종속성:
vcpkg.json
{
"dependencies": [
"qt5",
"qt-advanced-docking-system",
"qtkeychain"
]
}
패턴은 "qt*"
.의 모든 포트 이름과 일치합니다 vcpkg.json
. 그러나 문제가 있습니다! 포트 qt-advanced-docking-system
가 qtkeychain
공식 Qt Framework 라이브러리의 일부가 아니며 vcpkg가 사용자 지정 레지스트리에서 포트를 찾을 수 없으므로 설치가 실패합니다.
이 문제는 이러한 패키지를 기본 레지스트리에 대신 할당하여 해결할 수 있습니다.
기본 레지스트리를 선언하는 방법을 변경하고 해당 배열을 추가하여 qt-advanced-docking-system
qtkeychain
이 작업을 수행합니다 "packages"
.
vcpkg-configuration.json
{
"default-registry": null,
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "e79c0d2b5d72eb3063cf32a1f7de1a9cf19930f3",
"packages": ["*", "qt-advanced-docking-system", "qtkeychain"]
},
{
"kind": "git",
"repository": "https://github.com/custom-qt/custom-qt-registry",
"baseline": "adfc4de488094a384ca2c202b923ccc097956e0c",
"packages": ["qt*"]
}
]
}
정확한 일치 항목은 패턴 일치 qt-advanced-docking-system
보다 선호되며 qtkeychain
기본 레지스트리로 확인되기 때문입니다.
오버레이
오버레이는 전체 레지스트리를 만들지 않고 추가 포트 및 추가 삼중항으로 vcpkg를 확장하는 방법입니다. 오버레이는 레지스트리 조회 또는 버전 관리를 수행하기 전에 고려되며 기본 제공 삼중항 또는 포트를 대체합니다. 자세한 내용은 오버레이 설명서를 참조하세요.
오버레이 설정은 다음 순서로 평가됩니다.
- 명령줄에서 전달된 순서대로 오버레이합니다.
- 다음의 오버레이
vcpkg-configuration.json
순서대로, 다음 - 환경 변수에서 순서대로
VCPKG_OVERLAY_[PORTS|TRIPLETS]
오버레이합니다 .
vcpkg
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기