자습서: 레지스트리 기준을 사용하여 특정 버전의 Boost 라이브러리 설치
vcpkg는 제한된 Boost 패키지 하위 집합에만 의존하는 사용자의 편의를 위해 라이브러리 집합을 개별 패키지로 제공합니다 Boost
.
그러나 이 접근 방식에는 절충이 있습니다. 특정 버전의 Boost 종속성을 잠그려는 사용자는 종속되는 각 Boost 패키지의 버전을 재정의해야 합니다.
그러나 레지스트리 기준 및 패키지 패턴을 사용하여 이 문제에 대한 간단한 해결 방법이 있습니다.
- 터미널
- C++ 컴파일러
- vcpkg
의존하는 boost-optional
프로젝트가 있고 Boost 라이브러리의 버전을 1.80.0
잠그려고 하는 경우를 가정해 보겠습니다. 따라서 아래와 같이 종속성에 대한 재정의를 만듭니다.
vcpkg.json
{
"dependencies": [ "boost-optional" ],
"overrides": [
{ "name": "boost-optional", "version": "1.80.0" }
]
}
vcpkg-configuration.json
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "3265c187c74914aa5569b75355badebfdbab7987"
}
}
실행할 vcpkg install
때 다른 Boost 종속성이 기준 버전(1.83.0
)을 1.80.0
사용하는 동안에는 버전 boost-optional
만 잠겼습니다.
Fetching registry information from https://github.com/Microsoft/vcpkg (HEAD)...
Detecting compiler hash for triplet x64-linux...
The following packages will be built and installed:
* boost-assert:x64-linux -> 1.83.0
* boost-config:x64-linux -> 1.83.0
* boost-core:x64-linux -> 1.83.0
* boost-detail:x64-linux -> 1.83.0
* boost-io:x64-linux -> 1.83.0
* boost-move:x64-linux -> 1.83.0
boost-optional:x64-linux -> 1.80.0
* boost-predef:x64-linux -> 1.83.0
* boost-preprocessor:x64-linux -> 1.83.0
* boost-static-assert:x64-linux -> 1.83.0
* boost-throw-exception:x64-linux -> 1.83.0
* boost-type-traits:x64-linux -> 1.83.0
* boost-uninstall:x64-linux -> 1.83.0
* boost-utility:x64-linux -> 1.83.0
* boost-vcpkg-helpers:x64-linux -> 1.83.0
Additional packages (*) will be modified to complete this operation.
다음 명령을 실행하여 패키지의 버전 데이터베이스 boost-optional
를 수정한 커밋 기록을 확인합니다.
git log "--format=%H %cd %s" --date=short --left-only -- versions/b-/boost-optional.json
다음과 유사한 출력이 표시됩니다.
caa7579a1c48e2ca770f6ccf98cb03db95642631 2023-09-13 [boost] update to v1.83.0 (#33597)
5d3798ac7388ca66c169773e46103b14077b76a4 2023-06-06 [boost] Remove port version constraints (#31572)
501db0f17ef6df184fcdbfbe0f87cde2313b6ab1 2023-04-15 [boost-build] Fix SHA512 and add MSVC workaround. (#30884)
bedfdb774cfbe47da202169046ca15441a213f3e 2023-04-15 [Boost] Update Boost ports to 1.82#0 (#30856)
9484a57dd560b89f0a583be08af6753611c57fd5 2023-02-24 Update vcpkg-tool to 2023-02-16. (#29664)
6aa38234d08efefc55b70025cf6afc2212e78e15 2023-02-01 [boost] Fix generate ports to match the tree. (#29338)
6d41737729b170cb7d323a4fddd21607c9237636 2022-12-20 [boost] update to 1.81.0 (#28356)
5ba2b95aea2a39aa89444949c7a047af38c401c1 2022-10-18 [boost] Add version constraints (#26817)
8424da584e59e05956913bf96f87654aa3096c7e 2022-08-25 [boost] update to 1.80.0 (#26233)
96ec7fb25da25e0463446e552d59715a47c95e73 2022-04-21 [boost] update to 1.79.0 (#24210)
76d4836f3b1e027758044fdbdde91256b0f0955d 2022-01-10 [boost] update to 1.78.0 (#21928)
cc471dc0f59b7b2066d6172c2893419412327a7a 2021-09-27 [boost] update to 1.77.0 (#19556)
761c81d43335a5d5ccc2ec8ad90bd7e2cbba734e 2021-07-07 [boost] update to 1.76.0 (#17335)
68a74950d0400f5a803026d0860f49853984bf11 2021-01-21 [vcpkg] Rename `port_versions` to `versions` (#15784)
볼 수 있듯이 버전 1.80.0
에 대한 커밋이 나열됩니다. 다음 단계에서는 해당 커밋을 모든 Boost 패키지의 기준으로 사용합니다.
관련된 모든 Boost 종속성에 대한 재정의를 추가하는 대신 레지스트리 기준을 사용하여 버전 집합을 잠글 수 있습니다. 아래와 같이 파일을 수정합니다 vcpkg-configuration.json
.
vcpkg-configuration.json
{
"default-registry": {
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "3265c187c74914aa5569b75355badebfdbab7987"
},
"registries": [
{
"kind": "git",
"repository": "https://github.com/Microsoft/vcpkg",
"baseline": "8424da584e59e05956913bf96f87654aa3096c7e",
"packages": [ "boost*", "boost-*"]
}
]
}
구성 파일에는 두 개의 레지스트리 정의가 포함됩니다. 이 default-registry
문서를 작성할 때 최신 커밋을 사용할 때 https://github.com/Microsoft/vcpkg vcpkg 큐레이팅된 레지스트리를 가리키는 항목입니다. 또한 vcpkg 큐레이팅된 레지스트리를 가리키지만 이전 기준에서 두 번째 레지스트리를 가리키며 패턴과 boost-*
일치하는 boost*
패키지로 제한됩니다.
명령을 실행 vcpkg install
하면 이번에는 모든 Boost 라이브러리에서 버전을 1.80.0
사용하고 있음을 알 수 있습니다.
Fetching registry information from https://github.com/Microsoft/vcpkg (HEAD)...
Detecting compiler hash for triplet x64-linux...
The following packages will be built and installed:
* boost-assert:x64-linux -> 1.80.0
* boost-config:x64-linux -> 1.80.0
* boost-core:x64-linux -> 1.80.0
* boost-detail:x64-linux -> 1.80.0
* boost-io:x64-linux -> 1.80.0
* boost-move:x64-linux -> 1.80.0
boost-optional:x64-linux -> 1.80.0
* boost-predef:x64-linux -> 1.80.0
* boost-preprocessor:x64-linux -> 1.80.0
* boost-static-assert:x64-linux -> 1.80.0
* boost-throw-exception:x64-linux -> 1.80.0
* boost-type-traits:x64-linux -> 1.80.0
* boost-uninstall:x64-linux -> 1.80.0
* boost-utility:x64-linux -> 1.80.0
* boost-vcpkg-helpers:x64-linux -> 1.80.0
* boost-winapi:x64-linux -> 1.80.0
Additional packages (*) will be modified to complete this operation.
같은 다른 메타패키지에 동일한 방법을 사용할 수 있습니다 qt
.
다음에 시도할 몇 가지 추가 작업은 다음과 같습니다.
- 매니페스트 파일을 사용하여 패키지 설치
- 삼중자를 사용하여 사용자 지정 플랫폼용 패키지 설치
- 버전 관리를 사용하여 반복 가능한 빌드에 대한 버전 잠금
- 이진 캐싱을 사용하여 연속 통합 실행에서 이진 파일 다시 사용
- 사용자 지정 레지스트리를 사용하여 프라이빗 라이브러리 관리
vcpkg 피드백
vcpkg은(는) 오픈 소스 프로젝트입니다. 다음 링크를 선택하여 피드백을 제공해 주세요.