모던 CMake를 활용하여 효율적인 C++ 프로젝트 빌드 시스템을 구축하는 방법을 알아보겠습니다. 이번 글에서는 CMake의 기본 개념과 모던 CMake의 장점에 대해 소개하겠습니다.
CMake란 무엇인가?
CMake는 크로스 플랫폼 빌드 시스템으로, 다양한 컴파일러와 플랫폼에서 소프트웨어를 빌드할 수 있도록 도와주는 도구입니다. 개발자는 CMake를 사용하여 복잡한 빌드 설정을 간소화하고, 코드의 이식성을 높일 수 있습니다.
전통적인 CMake와 모던 CMake의 차이점
과거의 CMake 스크립트는 절차지향적이고 변수 설정이 복잡하여 유지보수가 어려웠습니다. 반면, 모던 CMake는 타겟 기반의 구성을 지향하며, 인터페이스와 의존성 관리가 용이해졌습니다.
전통적인 CMake 예시
# 전통적인 방법
add_definitions(-DDEBUG)
include_directories(/usr/include/mylib)
link_directories(/usr/lib/mylib)
add_executable(myapp main.cpp)
target_link_libraries(myapp mylib)
모던 CMake 예시
# 모던 CMake 방법
add_executable(myapp main.cpp)
target_compile_definitions(myapp PRIVATE DEBUG)
target_include_directories(myapp PRIVATE /usr/include/mylib)
target_link_libraries(myapp PRIVATE mylib)
모던 CMake의 주요 특징
- 타겟 기반 구성: 빌드 대상(타겟)에 직접 속성을 설정하여 명확하고 직관적인 빌드 스크립트를 작성할 수 있습니다.
- 의존성 관리 개선: target_link_libraries()를 통해 라이브러리 간 의존성을 쉽게 관리할 수 있습니다.
- 범위 지정 키워드: PRIVATE, PUBLIC, INTERFACE 키워드를 사용하여 컴파일 옵션과 링크 옵션의 전파 범위를 제어할 수 있습니다.
- 생성기 표현식: 조건부 설정을 가능하게 하여 복잡한 빌드 로직을 간결하게 표현할 수 있습니다.
간단한 프로젝트 설정하기
디렉토리 구조
my_project/
├── CMakeLists.txt
└── src/
└── main.cpp
main.cpp 내용
#include <iostream>
int main() {
std::cout << "Hello, Modern CMake!" << std::endl;
return 0;
}
CMakeLists.txt 내용
cmake_minimum_required(VERSION 3.15)
project(MyProject)
add_executable(MyApp src/main.cpp)
빌드 방법
터미널에서 다음 명령을 실행합니다.
mkdir build
cd build
cmake ..
cmake --build .
결론
이번 글에서는 모던 CMake의 필요성과 기본 사용법에 대해 알아보았습니다. 앞으로 모던 CMake의 심화 기능과 실제 프로젝트에 적용하는 방법을 자세히 살펴보겠습니다.
반응형
'개발 이야기 > CMake' 카테고리의 다른 글
[모던 CMake] 테스트 설정과 CI/CD 파이프라인 연동 (31) | 2024.12.02 |
---|---|
[모던 CMake] 외부 라이브러리와 패키지 관리 (0) | 2024.12.01 |
[모던 CMake] 타겟 기반 구성과 의존성 관리 (32) | 2024.11.30 |
[모던 CMake] C++ 표준 버전 설정 방법 비교 (16) | 2024.11.30 |
[CMake] Google Test (구글테스트) 종속성 추가하기 (0) | 2024.03.31 |