CMake 학습 로드맵
1단계: CMake 기본 개념 이해 (1-2주)
핵심 개념 CMake는 "크로스 플랫폼 메타 빌드 시스템"으로, 소스 코드를 직접 컴파일하지 않고 대신 타겟 플랫폼에 맞는 네이티브 빌드 파일들을 생성합니다 CMakeInternal Pointers. 예를 들어:
- Windows: Visual Studio 솔루션 파일
- Linux: Makefile
- macOS: XCode 프로젝트 파일
왜 CMake를 사용하는가? Modern CMake는 빌드 문제의 가능성을 줄여주고, CMake가 제공하는 도구들이 직접 작성하는 것보다 더 나으며, 더 많은 컴파일러와 상황에서 작동합니다 More Modern CMake.
2단계: 필수 학습 자료들
공식 자료 (가장 권장)
- CMake 공식 튜토리얼: CMake 공식 문서의 단계별 튜토리얼로, 12단계로 구성되어 있으며 각 단계는 이전 단계의 완전한 솔루션을 제공합니다 CMake Tutorial — CMake 4.1.1 Documentation
- URL: https://cmake.org/cmake/help/latest/guide/tutorial/index.html
- 특징: Step 1부터 Step 12까지 점진적 학습
- Modern CMake 가이드: https://cliutils.gitlab.io/modern-cmake/
- Modern CMake의 모범 사례와 패턴을 설명하는 포괄적인 가이드 Effective Modern CMake · GitHub
실용적 학습 자료 3. Internal Pointers - Modern CMake 입문: https://www.internalpointers.com/post/modern-cmake-beginner-introduction
- 실용적이고 가벼운 CMake 입문서로, 초보자를 위해 작성되었습니다 Introduction to modern CMake for beginners - Internal Pointers
- Professional CMake Book: Craig Scott의 "Professional CMake: A Practical Guide"는 초보자부터 숙련자까지 모든 CMake 사용자를 위한 포괄적이고 품질 높은 핸드북입니다 Effective Modern CMake · GitHub
3단계: 핵심 개념 분석
Modern CMake vs Old CMake 기존 방식은 include_directories와 link_libraries를 무분별하게 사용했지만, Modern CMake는 타겟 기반 접근법을 사용합니다 GitHub - schweitzer/modern-cmake-tutorial: Tutorial about doing CMake Right:
# 잘못된 구식 방법
find_package(Boost 1.55 COMPONENTS asio)
list(APPEND INCLUDE_DIRS ${BOOST_INCLUDE_DIRS})
list(APPEND LIBRARIES ${BOOST_LIBRARIES})
include_directories(${INCLUDE_DIRS})
link_libraries(${LIBRARIES})
# 올바른 Modern 방법
find_package(Boost 1.55 COMPONENTS asio REQUIRED)
target_link_libraries(my_target PRIVATE Boost::asio)
PRIVATE, PUBLIC, INTERFACE의 이해 Modern CMake에서 가장 중요한 개념 중 하나는 의존성의 범위를 명확히 하는 것입니다 Modern CMake – Tips and Tricks - incredibuild:
- PRIVATE: 현재 타겟에서만 사용
- PUBLIC: 현재 타겟과 이를 링크하는 다른 타겟에서도 사용
- INTERFACE: 현재 타겟에서는 사용 안 함, 이를 링크하는 다른 타겟에서만 사용
4단계: 단계별 학습 계획
Week 1-2: 기초
- CMake 공식 튜토리얼 Step 1-3 완료: 기본 CMakeLists.txt 작성, 프로젝트 설정, C++ 표준 설정 Step 1: A Basic Starting Point — CMake 4.1.1 Documentation
- 간단한 Hello World 프로젝트 만들기
- 변수와 기본 명령어 이해
Week 3-4: 중급
- Step 4-8 완료: 라이브러리 추가, Usage Requirements, Generator Expressions, 설치 및 테스팅 CMake Tutorial — CMake 4.1.1 Documentation
- 외부 라이브러리 연동 (find_package)
- 타겟 기반 설계 패턴 학습
Week 5-6: 고급
- Step 9-12 완료: 패키징, Static/Shared 라이브러리, Export Configuration CMake Tutorial — CMake 4.1.1 Documentation
- Cross-platform 빌드 설정
- CMake 모듈 작성
5단계: 실습 프로젝트
추천 실습 순서
- 단일 파일 실행: Hello World
- 라이브러리 프로젝트: 수학 라이브러리 만들기
- 복잡한 프로젝트: 여러 라이브러리와 의존성이 있는 프로젝트
- 실제 오픈소스 빌드: CLI11 같은 CMake 프로젝트를 클론해서 빌드해보기 More Modern CMake
6단계: 모범 사례 학습
Modern CMake 핵심 원칙 다음 모범 사례들을 따라야 합니다 GitHubIncredibuild:
- 최신 CMake 버전 사용 (최소 3.15+)
- 타겟 기반 설계 사용
- CMAKE_CXX_STANDARD 사용 (수동으로 -std=c++11 추가 금지)
- In-source 빌드 방지
- 적절한 코멘트와 문서화
7단계: 고급 주제
심화 학습 영역
- CMake Presets
- Cross-compilation
- Package Management (vcpkg, Conan 연동)
- Custom Commands와 Generators
- Testing Framework (CTest) 활용
학습 팁
- 점진적 학습: 공식 튜토리얼은 각 단계가 이전 단계의 완전한 솔루션을 제공하므로 순서대로 학습하세요 CMake Tutorial — CMake 4.1.1 Documentation
- 실습 중심: 이론만 읽지 말고 직접 CMakeLists.txt를 작성해보세요
- 오픈소스 분석: 널리 사용되는 오픈소스 프로젝트들의 CMakeLists.txt를 읽어보는 것이 모범 사례를 배우는 좋은 방법입니다 CMake Tutorial. I have read numerous documentations and… | by Onur Dündar | Medium
- 에러 디버깅: CMake 에러 메시지를 이해하고 해결하는 경험을 쌓으세요
이 로드맵을 따라 학습하시면 CMake를 체계적으로 마스터할 수 있을 것입니다. 특히 공식 튜토리얼부터 시작해서 Modern CMake 패턴으로 이어지는 순서가 가장 효과적입니다.
'코딩 > cpp' 카테고리의 다른 글
| [백준] 11399번 (0) | 2025.09.25 |
|---|---|
| [백준] 11047번 (0) | 2025.09.25 |
| [백준] 14626번 (0) | 2025.09.25 |
| inline 함수에 대해 (0) | 2025.09.15 |
| CLion 설정 방법 (0) | 2025.09.08 |