빌드 타입에 따른 설정

CMake의 빌드 타입 이해

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

  • 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++ 컴파일러 플래그를 설정하는 방법을 보여준다.

타겟별 빌드 타입 설정

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

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

사용자 정의 빌드 타입 추가

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

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

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

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

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

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

  • CMAKE_BUILD_TYPE 변수를 사용하여 기본 빌드 타입을 명시적으로 설정하라.

  • 빌드 타입별로 컴파일러 플래그를 세밀하게 조정하라.

  • 프로젝트 내 특정 타겟에 대해 빌드 타입별 설정을 적용하여 유연한 빌드 구성을 유지하라.

  • 필요에 따라 사용자 정의 빌드 타입을 추가하여 프로젝트의 요구사항을 반영하라.

  • 설치 경로를 빌드 타입에 따라 다르게 설정하여 빌드 아티팩트를 관리하라.


관련 자료:

Last updated