변수 선언 (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)라고 한다.
변수 스코프에는 크게 다음과 같은 종류가 있다:
- 디렉토리 스코프(Directory Scope): 기본 스코프로, 변수가 선언된 디렉토리와 그 하위 디렉토리에서만 유효한다.
- 캐시 스코프(Cache Scope): 캐시 변수는 CMake가 처음 실행될 때 설정되며, 이후 CMake 실행 시에도 그 값을 유지한다. 캐시 변수는
set()
명령어에CACHE
옵션을 사용하여 선언된다. - 전역 스코프(Global Scope): 특정 변수는 CMake의 전체 프로젝트에서 유효할 수 있으며, 이를 전역 스코프라고 한다. 그러나 일반적으로 CMake에서는 전역 스코프 변수를 권장하지 않는다.
캐시 변수 (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