[모던 CMake] 기초와 소개

모던 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의 주요 특징

  1. 타겟 기반 구성: 빌드 대상(타겟)에 직접 속성을 설정하여 명확하고 직관적인 빌드 스크립트를 작성할 수 있습니다.
  2. 의존성 관리 개선: target_link_libraries()를 통해 라이브러리 간 의존성을 쉽게 관리할 수 있습니다.
  3. 범위 지정 키워드: PRIVATE, PUBLIC, INTERFACE 키워드를 사용하여 컴파일 옵션과 링크 옵션의 전파 범위를 제어할 수 있습니다.
  4. 생성기 표현식: 조건부 설정을 가능하게 하여 복잡한 빌드 로직을 간결하게 표현할 수 있습니다.

간단한 프로젝트 설정하기

디렉토리 구조

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의 심화 기능과 실제 프로젝트에 적용하는 방법을 자세히 살펴보겠습니다.

반응형