위의 예는 USE_CUSTOM_LIB 변수가 ON으로 설정되었을 때만 특정 정의를 추가한다.
AND, OR 연산자 사용:
if(CMAKE_SYSTEM_NAME STREQUAL"Linux"ANDCMAKE_BUILD_TYPESTREQUAL"Debug") message("Building on Linux in Debug mode")endif()
이 조건문은 빌드 시스템이 Linux이고, 빌드 타입이 Debug인 경우에만 메시지를 출력한다.
elseif 및 else 사용:
if(CMAKE_SYSTEM_NAME STREQUAL"Windows") message("Building on Windows")elseif(CMAKE_SYSTEM_NAME STREQUAL"Linux") message("Building on Linux")else() message("Building on an unknown platform")endif()
이 예시는 시스템에 따라 다른 메시지를 출력한다.
파일 및 디렉토리 존재 여부에 따른 조건부 컴파일
CMake는 파일이나 디렉토리의 존재 여부에 따라 조건부 컴파일을 수행할 수 있는 기능을 제공한다. 이는 프로젝트의 특정 파일 또는 디렉토리가 있는 경우에만 특정 코드나 라이브러리를 포함하고자 할 때 유용하다.
파일 존재 여부 체크:
위의 코드는 config.h 파일이 존재할 경우에만 해당 디렉토리를 포함 디렉토리에 추가한다.
디렉토리 존재 여부 체크:
이 예시는 libs 디렉토리가 존재할 경우에만 서브디렉토리를 추가한다.
조건부 컴파일을 위한 함수 및 매크로
CMake에서 조건부 컴파일을 더 정교하게 제어하기 위해 함수와 매크로를 사용할 수 있다. 함수와 매크로는 코드의 중복을 줄이고, 복잡한 조건부 로직을 보다 깔끔하게 관리할 수 있게 해준다.
함수 사용 예:
이 함수는 USE_CUSTOM_LIB 변수가 설정되었을 때만 호출되며, 이로 인해 조건부 컴파일 논리를 재사용할 수 있다.
매크로 사용 예:
매크로는 여러 곳에서 반복되는 조건부 설정을 정의하는 데 유용하다.
조건부 컴파일을 이용한 목표 타겟 설정
CMake에서는 특정 조건에 따라 타겟을 설정하거나 타겟의 속성을 변경할 수 있다. 이는 다양한 빌드 환경에서 유연한 타겟 설정을 가능하게 한다.