변수 선언 (Variable Declaration)

CMake에서 변수는 set() 명령어를 통해 선언된다. set() 명령어는 변수의 이름과 그 값을 할당하는 데 사용된다. 예를 들어, set(MY_VAR "Hello")MY_VAR라는 이름의 변수를 선언하고 그 값으로 "Hello"를 할당한다. 변수의 이름은 대소문자를 구분하지 않는다.

변수는 다음과 같이 선언된다:

set(변수명 값)

변수는 숫자, 문자열, 파일 경로, Boolean 값 등 다양한 형식을 가질 수 있다. CMake에서는 이러한 변수들이 어떤 타입인지 명시하지 않기 때문에 동적으로 타입이 결정된다.

변수 사용 (Variable Usage)

선언된 변수는 ${} 구문을 통해 참조된다. 예를 들어, set(MY_VAR "Hello")로 선언된 변수를 참조하려면 ${MY_VAR}로 사용하면 된다. 변수를 참조할 때는 항상 ${} 구문을 사용해야 하며, 그렇지 않으면 변수의 이름이 문자열로 취급될 수 있다.

message(STATUS "The value of MY_VAR is: ${MY_VAR}")

이 예제에서 message() 함수는 MY_VAR 변수의 값을 출력한다.

변수 스코프 (Variable Scope)

CMake 변수는 선언된 위치에 따라 스코프(범위)가 달라진다. 기본적으로 변수는 선언된 디렉토리와 그 하위 디렉토리에서만 유효한다. 이를 디렉토리 스코프(Directory Scope)라고 한다.

변수 스코프에는 크게 다음과 같은 종류가 있다:

캐시 변수 (Cache Variables)

캐시 변수는 사용자가 직접 설정하거나 cmake 명령어를 실행할 때, CMake GUI, 또는 ccmake에서 설정할 수 있다. 캐시 변수는 CMakeLists.txt 파일에 set() 명령어를 사용할 때 CACHE 키워드를 통해 선언할 수 있다.

set(MY_VAR "Hello" CACHE STRING "A cached variable")

이 변수는 프로젝트 내의 모든 CMakeLists.txt 파일에서 접근할 수 있으며, CMake가 다시 실행될 때도 그 값을 유지한다.

조건문과 변수 (Conditionals and Variables)

CMake에서 변수는 조건문 내에서 사용될 수 있다. 예를 들어, 특정 조건에 따라 다른 값을 설정하거나 특정 코드를 실행할 수 있다.

if(MY_VAR STREQUAL "Hello")
    message(STATUS "MY_VAR is Hello")
endif()

이 예제에서는 MY_VAR의 값이 "Hello"인지 확인하고, 조건이 참이면 메시지를 출력한다.

변수의 리스트 (Variable Lists)

CMake 변수는 하나의 값이 아니라 여러 값을 가질 수 있으며, 이를 리스트라고 한다. 리스트는 세미콜론(;)으로 구분된 값들의 집합이다.

set(MY_LIST "one;two;three")

이 변수는 세 개의 값을 가진 리스트로, 각각 one, two, three가 된다. 리스트의 요소에 접근하거나 조작하기 위해 list() 명령어를 사용할 수 있다.

list(APPEND MY_LIST "four")

이 명령어는 MY_LIST 변수에 four 값을 추가한다.

변수의 초기화와 기본값 (Initialization and Default Values)

변수는 선언과 동시에 초기화할 수 있으며, 초기화되지 않은 변수는 참조할 때 빈 문자열로 간주된다. 특정 변수가 이미 선언되어 있는지 여부를 확인하려면 if(DEFINED 변수명) 구문을 사용할 수 있다.

if(NOT DEFINED MY_VAR)
    set(MY_VAR "DefaultValue")
endif()

이 구문은 MY_VAR 변수가 선언되지 않았다면 "DefaultValue"로 초기화한다.


관련 자료: - CMake Documentation: https://cmake.org/cmake/help/latest/ - Mastering CMake by Ken Martin and Bill Hoffman