CMakeLists.txt 파일에서 조건부 컴파일은 특정 조건에 따라 소스 파일을 컴파일하거나 컴파일 옵션을 설정하는 방법을 제공한다. 조건부 컴파일은 코드의 유연성과 유지보수성을 높이는 데 필수적이다.

조건부 컴파일의 기본 개념

조건부 컴파일은 특정 조건이 충족될 때만 코드의 일부분이 컴파일되도록 하는 것이다. 이 개념은 다양한 플랫폼, 빌드 구성, 또는 사용자의 요구 사항에 따라 특정 코드가 컴파일되거나 제외되도록 조절하는 데 사용된다.

CMake에서는 if(), elseif(), else(), endif() 명령어를 사용하여 조건부 컴파일을 구현할 수 있다. 이러한 조건문은 일반적으로 변수 값, 파일 존재 여부, 시스템 속성 등을 평가하여 특정 동작을 결정한다.

조건부 컴파일을 위한 CMake 변수

CMake 변수는 조건부 컴파일을 구현하는 데 중요한 역할을 한다. 일반적으로 다음과 같은 변수가 사용된다.

CMake 조건문

CMake의 조건문은 다양한 형태의 조건을 평가하여 코드의 일부를 선택적으로 실행할 수 있다. 주요 조건문 사용법은 다음과 같다.

파일 및 디렉토리 존재 여부에 따른 조건부 컴파일

CMake는 파일이나 디렉토리의 존재 여부에 따라 조건부 컴파일을 수행할 수 있는 기능을 제공한다. 이는 프로젝트의 특정 파일 또는 디렉토리가 있는 경우에만 특정 코드나 라이브러리를 포함하고자 할 때 유용하다.

조건부 컴파일을 위한 함수 및 매크로

CMake에서 조건부 컴파일을 더 정교하게 제어하기 위해 함수와 매크로를 사용할 수 있다. 함수와 매크로는 코드의 중복을 줄이고, 복잡한 조건부 로직을 보다 깔끔하게 관리할 수 있게 해준다.

enable_custom_feature() `` 이 함수는USE_CUSTOM_LIB` 변수가 설정되었을 때만 호출되며, 이로 인해 조건부 컴파일 논리를 재사용할 수 있다.

setup_platform_specifics() ``` 매크로는 여러 곳에서 반복되는 조건부 설정을 정의하는 데 유용하다.

조건부 컴파일을 이용한 목표 타겟 설정

CMake에서는 특정 조건에 따라 타겟을 설정하거나 타겟의 속성을 변경할 수 있다. 이는 다양한 빌드 환경에서 유연한 타겟 설정을 가능하게 한다.

if(CMAKE_BUILD_TYPE STREQUAL "Debug") target_compile_definitions(myapp PRIVATE DEBUG_MODE) endif() `` 이 예제는 Debug 빌드 모드에서만DEBUG_MODE`를 정의하여 컴파일하도록 한다.


관련 자료: - CMake 공식 문서: https://cmake.org/documentation/ - Mastering CMake by Ken Martin and Bill Hoffman