vcpkg와 FetchContent가 겹치면 원격 Mac CI에서 tarball·Git·바이너리 캐시 축이 동시에 열립니다. 직연결·미러·자체 캐시 표, 실행 변수, 동시성·lockfile 검수, FAQ를 한 페이지에 모았습니다. Bazel 외부 캐시·대용량 전송·블로그·홈.
① 시나리오와 핵심 통증
FetchContent와 vcpkg가 겹치면 국경 간 회선에서 TLS·타임아웃이 먼저 드러납니다.
- 이중 풀: 같은 라이브러리를 두 경로로 받아 중복 빌드·해시 불일치
- 캐시 미스: 트리플릿·컴파일러·패치가 조금만 달라도 소스 풀로 복귀
- 동시 클론:
downloads·_deps에서 락·부분 파일 경합
표로 경로를 고정한 뒤 변수·단계·검수를 적용하세요. 임대 원격 Mac에 트리플릿을 상주시키면 재현이 쉬워집니다.
② 직연결·미러·자체 캐시 의사결정 매트릭스
| 모드 | 적합 | 리스크 |
|---|---|---|
| 직연결 | 퍼블릭 포트·PoC | RTT·레이트리밋 |
| 미러 | 사내 게이트·고정 URL | TLS 인터셉트 검증 |
| 자체 캐시 | 동일 트리플릿 반복 | 스토리지·키 롤링 |
규칙: 일상 CI는 바이너리 히트 우선, FetchContent는 고정 태그·아카이브만.
③ 복붙용 환경 변수·CMake 인자
| 항목 | 역할 |
|---|---|
VCPKG_ROOT |
vcpkg 루트 고정 |
CMAKE_TOOLCHAIN_FILE |
scripts/buildsystems/vcpkg.cmake |
VCPKG_BINARY_SOURCES |
files,…,readwrite 또는 조직 표준 스토리지 |
FETCHCONTENT_BASE_DIR |
스테이징을 SSD·잡별 경로로 |
FETCHCONTENT_FULLY_DISCONNECTED |
시드만 쓸 때 ON |
export VCPKG_ROOT="${HOME}/vcpkg"
export VCPKG_DEFAULT_BINARY_CACHE="${HOME}/Library/Caches/vcpkg-${CI_PIPELINE_ID:-local}"
mkdir -p "$VCPKG_DEFAULT_BINARY_CACHE"
export VCPKG_BINARY_SOURCES="clear;files,${VCPKG_DEFAULT_BINARY_CACHE},readwrite"
cmake -S . -B build -DCMAKE_TOOLCHAIN_FILE="$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake" \
-DFETCHCONTENT_BASE_DIR="${HOME}/tmp/fc-${CI_PIPELINE_ID:-local}"
cmake --build build --parallel "${CMAKE_BUILD_PARALLEL_LEVEL:-4}"
vcpkg install --debug로 히트 로그를 남기고 configure 로그의 Git URL을 대조하세요.
④ 운영 단계 체크리스트
- 러너에 트리플릿·Xcode 문자열 고정,
vcpkg version해시를 산출물에 첨부 - vcpkg.json·baseline으로 포트 고정, FetchContent는 태그·SHA 리터럴
- 주간 캐시 시드 잡 후 일상 CI는 읽기 위주
- 빌드 풀 FAQ로 동시성·
downloads경합 완화 - 실패 시 manifest 로그·FetchContent 로그를 아티팩트로 보존
⑤ lockfile·일관성 검수
릴리스 전 확인
- registry·baseline이 PR과 동일
- FetchContent GIT_TAG가 문서 버전과 일치
- 로그에 캐시 히트 요약 한 줄
⑥ 메타 title·description 템플릿
Title: 2026 원격 Mac vcpkg·FetchContent 국경 간 CI 매트릭스 | MacPull
Description: 바이너리 캐시·직연결·미러 비교, lockfile 검수·FAQ, 원격 Mac self-hosted.
⑦ FAQ
Q. 캐시 미스
A. 트리플릿·컴파일러·패치 해시를 업로드 파이프와 대조, overlay-ports 혼입 여부 확인.
Q. FetchContent만 느림
A. shallow·아카이브·미러로 홉 축소, FETCHCONTENT_BASE_DIR를 NVMe로.
Q. 이중 빌드
A. vcpkg 포트를 단일 소스로 두고 FetchContent는 얇게.
요약: 경로 표 → 바이너리 우선 → lock·태그 동결 → 동시성·로그.