CMake의 빌드 타입 이해

CMake는 다양한 빌드 타입을 지원하여 개발자들이 원하는 방식으로 소프트웨어를 빌드할 수 있도록 한다. 기본적으로 CMake는 Debug, Release, RelWithDebInfo, MinSizeRel 네 가지 표준 빌드 타입을 제공한다. 각 빌드 타입은 서로 다른 최적화 수준과 디버깅 정보 포함 여부에 따라 구분된다.

CMakeLists.txt에서 빌드 타입 설정 방법

CMakeLists.txt 파일에서 특정 빌드 타입을 설정하는 방법은 여러 가지가 있다. 이를 통해 빌드 시 자동으로 선택되거나, 개발자가 명시적으로 빌드 타입을 지정할 수 있다.

기본 빌드 타입 설정

CMake 프로젝트에서 기본 빌드 타입을 설정하는 방법은 CMAKE_BUILD_TYPE 변수를 설정하는 것이다. 이는 빌드 명령어에서 빌드 타입을 명시하지 않았을 때 사용된다.

set(CMAKE_BUILD_TYPE Release)

이 설정을 통해 개발자가 명시적으로 빌드 타입을 지정하지 않으면 Release 빌드 타입이 사용된다.

빌드 타입에 따른 컴파일러 설정

빌드 타입에 따라 다른 컴파일러 옵션을 설정할 수 있다. 이를 위해 CMAKE_CXX_FLAGS_<CONFIG> 변수를 사용한다.

set(CMAKE_CXX_FLAGS_DEBUG "-g -O0")
set(CMAKE_CXX_FLAGS_RELEASE "-O3")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g")
set(CMAKE_CXX_FLAGS_MINSIZEREL "-Os")

위 예제는 각각의 빌드 타입에 대해 C++ 컴파일러 플래그를 설정하는 방법을 보여준다.

타겟별 빌드 타입 설정

특정 타겟에 대해 빌드 타입별로 설정을 적용할 수 있다. 이를 통해 프로젝트 내 특정 타겟에 대해 개별적인 빌드 설정을 할 수 있다.

add_executable(my_target main.cpp)
set_target_properties(my_target PROPERTIES
    COMPILE_FLAGS "$<$<CONFIG:DEBUG>:-g>"
    LINK_FLAGS "$<$<CONFIG:RELEASE>:-s>"
)

위 코드에서 my_target 타겟은 Debug 빌드 타입에서 -g 플래그를 사용하고, Release 빌드 타입에서는 -s 플래그를 사용하도록 설정된다.

사용자 정의 빌드 타입 추가

CMake는 기본적으로 제공하는 빌드 타입 외에도 사용자 정의 빌드 타입을 추가할 수 있다. 이는 프로젝트의 특성에 맞는 빌드 구성을 가능하게 한다.

set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo;MinSizeRel;CustomType" CACHE STRING "" FORCE)
set(CMAKE_CXX_FLAGS_CUSTOMTYPE "-O2 -funroll-loops")

위 예제에서는 CustomType이라는 새로운 빌드 타입을 정의하고, 그에 따른 C++ 플래그를 설정 하였다.

빌드 타입에 따른 설치 경로 설정

빌드 타입에 따라 설치 경로를 다르게 설정할 수 있다. 이를 통해 빌드 아티팩트를 구분하여 관리할 수 있다.

install(TARGETS my_target
    RUNTIME DESTINATION bin/$<CONFIG>
)

위 코드에서는 빌드 타입에 따라 실행 파일이 bin/Debug, bin/Release 등으로 설치된다.

CMakeLists.txt에서 빌드 타입 선택 팁


관련 자료: - CMake Documentation - Modern CMake Practices