Cmake tips and tricks
Jump to navigation
Jump to search
Overview
CMake는 오픈소스 크로스 플랫폼 빌드 시스템 자동화 도구입니다. 소스 코드와 컴파일러를 독립적으로 관리하며, 빌드 파일을 생성합니다.
Summary
- 무엇인가? 크로스 플랫폼 빌드 시스템 자동화 도구
- 왜 필요한가? 복잡한 빌드 의존성 관리, 다중 플랫폼 지원
- 언제 사용하는가? C/C++ 프로젝트 빌드, 다중 플랫폼 개발
---
Purpose
이 문서가 존재하는 이유
- Goal: CMake 소스 빌드 방법, 설치 가이드 제공
- Scope: CMake 소스 컴파일, 의존성 설치
- Non-goals: CMakeLists.txt 작성법, CMake 모듈 상세
---
Key Concepts
| 개념 | 설명 | Related |
|---|---|---|
| CMake | 크로스 플랫폼 빌드 시스템 자동화 도구 | Linux |
| CMakeLists.txt | CMake 빌드 설정 파일 | Cmake tips and tricks |
| Make/Ninja | CMake가 생성하는 빌드 시스템 | Cmake tips and tricks |
| libssl-dev | OpenSSL 개발 라이브러리 | Cmake tips and tricks |
---
Architecture
CMake 빌드 프로세스:
graph TD
A[CMakeLists.txt] --> B[CMake 설정]
B --> C[Makefile/Ninja 파일 생성]
C --> D[빌드 실행]
D --> E[실행 파일/라이브러리]---
Workflow
CMake 소스 빌드 워크플로우:
- 의존성 설치
- sudo apt install libssl-dev g++
- CMake 소스 다운로드
- cmake 소스 압축 해제
- 빌드 디렉토리 생성
- mkdir build && cd build
- CMake 실행
- cmake ..
- 빌드
- make -j$(nproc)
- 설치
- sudo make install
---
Detailed Explanation
CMake 소스 빌드
다른 버전의 CMake가 설치되어 있으면 먼저 제거합니다. 컴파일러(g++)가 설치되어 있어야 합니다.
# 기존 CMake 제거
sudo apt remove cmake
# 의존성 설치
sudo apt install libssl-dev
# 최신 버전 다운로드
wget https://cmake.org/files/v3.28/cmake-3.28.0.tar.gz
tar -xzf cmake-3.28.0.tar.gz
cd cmake-3.28.0
# 빌드 및 설치
./bootstrap
make -j$(nproc)
sudo make install
---
Configuration
CMake 빌드 옵션
# 빌드 디렉토리 생성
mkdir build && cd build
# CMake 설정
cmake ..
# 특정 빌드 시스템 사용
cmake -G "Ninja" ..
# 컴파일러 지정
cmake -DCMAKE_C_COMPILER=gcc -DCMAKE_CXX_COMPILER=g++ ..
---
Examples
Example 1: CMake 소스 빌드
입력:
sudo apt remove cmake
sudo apt install libssl-dev
wget https://cmake.org/files/v3.28/cmake-3.28.0.tar.gz
tar -xzf cmake-3.28.0.tar.gz
cd cmake-3.28.0
./bootstrap
make -j$(nproc)
sudo make install
---
Best Practices
- 소스 빌드 — 최신 버전 필요 시 소스 빌드 권장
- libssl-dev 설치 — CMake 빌드에 필수 의존성
- g++ 설치 — C/C++ 컴파일러 필수
- 빌드 디렉토리 분리 — out-of-source 빌드 권장
- Ninja 사용 — 대규모 프로젝트에서 Make보다 빠른 빌드
---
Limitations
- 소스 빌드는 시간이 많이 소요
- 의존성 관리 수동
- 최신 버전 유지 위해 정기적 업데이트 필요
---
References
---
Related Pages
---