-
CPM.cmake
(CMake Package Manager
)는CMake
의FetchContent
모듈을 확장하여, 프로젝트 외부의 라이브러리를 간편하게 가져오고 캐싱할 수 있도록 돕는 경량 의존성 관리 도구 입니다.- 프로젝트 홈페이지 : https://github.com/cpm-cmake/CPM.cmake
-
일반적으로
GitHub
저장소에서 패키지를 받아오는 용도로 사용되지만, 사설Git
서버(예: 내부IP
기반 서버)에서도 충분히 활용 가능합니다. -
이 문서에서는 사설
Git
서버를 구축하고,CPM.cmake
를 이용해 해당 서버에서 라이브러리를 자동으로 다운로드하여 사용하는 방법 을 자세히 소개합니다.
-
CPM.cmake
는 프로젝트 내에 직접 포함하는 것이 일반적입니다: -
bash
mkdir -p cmake wget -O cmake/CPM.cmake https://github.com/cpm-cmake/CPM.cmake/releases/latest/download/get_cpm.cmake
-
아래는
fmt
,nlohmann/json
,Catch2
를CPM
(CMake Package Manager
)을 통해GitHub
에서 받아 사용하는 예시입니다:fmt
: https://github.com/fmtlib/fmtnlohmann/json
: https://github.com/nlohmann/jsonCatch2
: https://github.com/catchorg/Catch2
-
cmake
cmake_minimum_required(VERSION 3.14 FATAL_ERROR) # create project project(MyProject) # add executable add_executable(main main.cpp) # add dependencies include(cmake/CPM.cmake) CPMAddPackage("gh:fmtlib/fmt#7.1.3") CPMAddPackage("gh:nlohmann/json@3.10.5") CPMAddPackage("gh:catchorg/Catch2@3.4.0") # link dependencies target_link_libraries(main fmt::fmt nlohmann_json::nlohmann_json Catch2::Catch2WithMain )
-
#버전
은Git
태그/브랜치/커밋을 직접 지정하는 방식이며,
@버전
은CPM
내부 버전 추적용 이름을 포함하는 방식입니다.
일반적으로@버전
이 캐시 충돌을 줄이고 관리에 더 유리합니다.
-
다음은 사설
Git
저장소에서 라이브러리를 받아와 사용하는 예시입니다: -
cmake
cmake_minimum_required(VERSION 3.14) project(MyProject) include(cmake/CPM.cmake) CPMAddPackage( NAME MyLib GIT_REPOSITORY git@192.168.0.10:mylib.git GIT_TAG main # 또는 특정 커밋 해시, 태그 ) add_executable(main main.cpp) target_link_libraries(main MyLib)
-
GIT_TAG
는 반드시 명시해야 하며, 브랜치명, 태그명, 또는 커밋 해시를 사용할 수 있습니다.
-
CPM
(CMake Package Manager
)은Git
저장소뿐만 아니라 압축 파일(.zip
등) 형식의 패키지 도URL
을 통해 직접 가져올 수 있습니다. -
cmake
# 버전은 자동 추정 (예: 파일명에서 추출) CPMAddPackage("https://example.com/my-package-1.2.3.zip") # MD5 해시값을 명시하여 무결성 검증 CPMAddPackage("https://example.com/my-package-1.2.3.zip#MD5=68e20f674a48be38d60e129f600faf7d") # 명시적으로 버전 지정 CPMAddPackage("https://example.com/my-package.zip@1.2.3")
-
이 방식은
Git
을 사용하지 않는 사내 배포 시스템이나, 외부 공개 라이브러리를 간단히 가져오고자 할 때 유용합니다.
-
CPM.cmake
는 다운로드된 의존성을 자동으로 캐싱합니다. 기본 캐시 위치는 다음과 같습니다:$HOME/.cache/CPM
${CMAKE_BINARY_DIR}/_deps
(빌드 디렉토리 내)
-
이 디렉토리를 보존하거나 다른 머신에 복사하면 오프라인에서도 동일하게 사용할 수 있습니다.
-
단순한
Git
베어 저장소 외에도, 다음과 같은 웹 기반Git
서버를 설치하여 사용자 인터페이스와 프로젝트 관리 기능을 강화할 수 있습니다:- Gitea : 경량 오픈소스
Git
서비스 - GitLab CE : 보다 강력한
CI
/CD
, 권한 관리 등 제공
- Gitea : 경량 오픈소스
-
이런 도구들은
SSH
/HTTPS
모두를 지원하며, 여러 개발자와 협업 시 매우 유용합니다.
-
사설 서버(IP:
192.168.0.10
등)에Git
을 설치합니다:-
bash
sudo apt update sudo apt install git
-
-
베어 저장소를 생성합니다:
-
bash
mkdir -p /srv/git/mylib.git cd /srv/git/mylib.git git init --bare
-
-
클라이언트에서 해당 서버로 접속할 수 있도록
SSH
인증을 설정합니다:- (1) 서버에
git
사용자 생성 (또는 기존 사용자 사용) - (2) 클라이언트의 공개키를 서버의
~/.ssh/authorized_keys
에 등록 - (3) 클라이언트에서 SSH 접속 확인:
-
bash
ssh git@192.168.0.10
-
- (1) 서버에
-
CPM
사용을 위하여 비밀번호 없이 접근되도록 설정하는 것이 중요합니다.
-
사설
Git
서버가HTTPS
로 동작하고 있고, 자체 서명된SSL
인증서를 사용하는 경우 다음 설정으로 인증서 검증을 건너뛸 수 있습니다: -
bash
git config --global http.sslVerify false
-
⚠️ 단, 이 설정은 보안상 위험하므로, 내부 개발 환경 에서만 사용하는 것이 좋습니다.
- 사설
Git
서버와CPM.cmake
를 조합하면, 외부 네트워크에 의존하지 않고도 안정적으로CMake
의존성을 관리할 수 있습니다. - 특히, 보안이 중요한 기업 내 네트워크나, 오프라인 환경에서도
CMake
프로젝트를 유연하게 운영할 수 있는 강력한 방법입니다.
- 도움이 되셨으면 하단의 ❤️ 공감 버튼 부탁 드립니다. 감사합니다! 😄
'CMake' 카테고리의 다른 글
cmrc : CMake 프로젝트에서 리소스를 바이너리에 포함 (0) | 2025.03.11 |
---|---|
CMake의 FetchContent 모듈 : 의존성 빌드 (0) | 2025.03.11 |
Objective-C CMake file (Executable file) (0) | 2024.11.09 |