CMake는 C++ 프로젝트에서 자주 사용되는 빌드 시스템이다. 빌드 설정에서 중요한 부분 중 하나는 "빌드 타입(build type)"이다. CMakeLists.txt 파일에서 빌드 타입을 설정하는 방법과 그 의미에 대해 알아본다.

빌드 타입의 정의

빌드 타입은 CMake에서 컴파일러의 동작을 결정하는 중요한 변수이다. 보통 컴파일러 최적화 수준과 디버깅 정보의 포함 여부를 조절한다. 대표적인 빌드 타입으로는 Debug, Release, RelWithDebInfo, MinSizeRel 등이 있다. 각각의 빌드 타입은 다음과 같은 특성을 갖는다.

CMakeLists.txt에서 빌드 타입 설정

빌드 타입은 CMakeLists.txt 파일 내에서 CMAKE_BUILD_TYPE 변수를 통해 설정할 수 있다. 이 변수를 설정함으로써 CMake는 적절한 컴파일러 플래그를 자동으로 적용한다.

set(CMAKE_BUILD_TYPE Release)

위와 같이 설정하면, 빌드 과정에서 Release 타입의 설정이 사용된다. 만약 사용자가 명령줄에서 특정 빌드 타입을 지정하지 않는다면, 이 값이 기본값으로 사용된다.

CMAKE_BUILD_TYPE 변수의 활용

CMAKE_BUILD_TYPE 변수는 단일 구성 빌드 시스템에서 주로 사용된다. 단일 구성 빌드 시스템이란, 한 번에 하나의 빌드 타입만을 지원하는 시스템을 말한다. 예를 들어, makeninja와 같은 빌드 도구는 단일 구성 빌드 시스템에 해당한다.

사용자가 명령줄에서 빌드 타입을 지정하려면 다음과 같이 한다.

cmake -DCMAKE_BUILD_TYPE=Debug ..

이 명령은 CMake에게 Debug 빌드 타입을 사용하도록 지시한다. 이 변수는 빌드 설정에서 매우 중요한 역할을 하며, 필요에 따라 빌드 스크립트에서 다른 설정과 함께 조정할 수 있다.

다중 구성 빌드 시스템에서의 빌드 타입

Visual Studio와 같은 다중 구성 빌드 시스템은 여러 빌드 타입을 동시에 관리할 수 있다. 이 경우 CMAKE_BUILD_TYPE 변수는 무시된다. 대신, 사용자는 IDE에서 빌드 타입을 선택하거나 CMake의 --config 플래그를 사용해 특정 빌드 타입을 지정할 수 있다.

cmake --build . --config Release

이 명령은 Visual Studio와 같은 환경에서 Release 빌드 타입을 선택하여 빌드한다.

CMAKE_CONFIGURATION_TYPES 변수

다중 구성 빌드 시스템에서 여러 빌드 타입을 정의할 수 있는 또 다른 변수로 CMAKE_CONFIGURATION_TYPES가 있다. 이 변수는 어떤 빌드 타입을 사용할 수 있는지를 지정하며, 일반적으로 Debug;Release;MinSizeRel;RelWithDebInfo로 설정된다.

set(CMAKE_CONFIGURATION_TYPES "Debug;Release;MinSizeRel;RelWithDebInfo" CACHE STRING "" FORCE)

이 설정을 통해 다중 구성 빌드 시스템에서 지원되는 모든 빌드 타입을 명시할 수 있다.

사용자 정의 빌드 타입

CMake에서는 사용자가 원하는 빌드 타입을 정의할 수도 있다. 이를 위해 특정 컴파일러 플래그를 설정하는 CMake 변수를 사용한다.

set(CMAKE_CXX_FLAGS_CUSTOM "-O2 -g -DDEBUG")
set(CMAKE_BUILD_TYPE Custom)

이와 같이 설정하면, Custom이라는 새로운 빌드 타입을 정의할 수 있다. 이는 특정 요구 사항에 맞게 최적화 및 디버깅 옵션을 조정할 때 유용하다.


관련 자료: