CMake는 소프트웨어 빌드를 구성하기 위한 크로스 플랫폼 도구이다. CMakeLists.txt 파일은 CMake 프로젝트의 구성을 정의하는데, 이 파일에서 사용되는 내장 변수들은 프로젝트의 설정과 빌드 과정을 제어하는 중요한 역할을 한다. 이 문서에서는 CMakeLists.txt에서 자주 사용되는 내장 변수들을 계층적으로 설명한다.
프로젝트 설정 관련 변수
CMakeLists.txt에서 프로젝트의 기본적인 속성을 설정하기 위해 사용되는 변수들이다.
PROJECT_NAME
PROJECT_NAME
변수는 project()
명령어에 의해 설정된다. 이 변수는 프로젝트의 이름을 나타내며, 프로젝트 내에서 다른 설정들에 쉽게 접근할 수 있도록 한다.
project(MyProject)
위와 같은 설정이 있을 경우, PROJECT_NAME
은 MyProject
가 된다.
PROJECT_VERSION
PROJECT_VERSION
변수는 프로젝트의 버전을 지정하는데 사용된다. project()
명령어에 VERSION
옵션을 추가하여 설정할 수 있다.
project(MyProject VERSION 1.2.3)
이 경우, PROJECT_VERSION
변수는 1.2.3
이 된다. 이 변수는 소프트웨어의 릴리즈나 패키징에 유용하게 쓰인다.
PROJECT_SOURCE_DIR
PROJECT_SOURCE_DIR
변수는 최상위 CMakeLists.txt 파일이 위치한 디렉토리의 절대 경로를 나타낸다. 프로젝트의 소스 파일에 대한 경로를 지정할 때 유용하다.
set(SOURCE_FILES ${PROJECT_SOURCE_DIR}/src/main.cpp)
컴파일러와 빌드 관련 변수
CMake는 다양한 컴파일러와 빌드 환경을 지원하며, 이를 제어하기 위해 여러 변수를 제공한다.
CMAKE_CXX_COMPILER
CMAKE_CXX_COMPILER
변수는 C++ 파일을 컴파일하기 위해 사용되는 컴파일러의 경로를 지정한다. 이 변수는 프로젝트의 초기 설정 시 자동으로 감지되며, 명시적으로 설정할 수도 있다.
set(CMAKE_CXX_COMPILER /usr/bin/g++)
이 변수는 다양한 플랫폼에서 C++ 컴파일러를 설정하거나 변경할 때 중요하다.
CMAKE_CXX_FLAGS
CMAKE_CXX_FLAGS
변수는 C++ 컴파일러에 전달할 추가적인 플래그를 지정할 때 사용된다.
set(CMAKE_CXX_FLAGS "-Wall -O2")
이 설정은 모든 C++ 파일을 컴파일할 때 경고 메시지와 최적화 옵션을 활성화한다.
CMAKE_BUILD_TYPE
CMAKE_BUILD_TYPE
변수는 빌드 타입을 설정하는 데 사용된다. 대표적인 값으로는 Debug
, Release
, MinSizeRel
, RelWithDebInfo
등이 있다.
set(CMAKE_BUILD_TYPE Release)
이 설정은 프로젝트를 최적화된 릴리즈 모드로 빌드하도록 지시한다.
경로 관련 변수
경로 관련 변수들은 소스 파일, 빌드 디렉토리, 설치 디렉토리 등을 정의하는 데 사용된다.
CMAKE_SOURCE_DIR
CMAKE_SOURCE_DIR
변수는 최상위 소스 디렉토리의 절대 경로를 나타낸다. PROJECT_SOURCE_DIR
과 유사하지만, 포함된 모든 CMakeLists.txt 파일에서 동일한 경로를 참조한다.
CMAKE_BINARY_DIR
CMAKE_BINARY_DIR
변수는 CMake가 빌드 출력을 생성하는 디렉토리의 절대 경로를 나타낸다. 보통 빌드 디렉토리를 설정할 때 유용하다.
set(EXECUTABLE_OUTPUT_PATH ${CMAKE_BINARY_DIR}/bin)
위와 같은 설정은 실행 파일들이 빌드 디렉토리의 bin
폴더에 출력되도록 한다.
CMAKE_INSTALL_PREFIX
CMAKE_INSTALL_PREFIX
변수는 프로젝트 설치 시 기본적으로 설치되는 경로를 지정한다. 이 변수는 패키징이나 배포를 위해 중요하다.
set(CMAKE_INSTALL_PREFIX /usr/local)
이 경우, 설치 과정에서 모든 파일이 /usr/local
하위에 위치하게 된다.
시스템 및 환경 관련 변수
시스템 및 환경 관련 변수들은 프로젝트가 빌드되는 시스템의 정보를 제공하거나 환경 설정을 제어하는 데 사용된다.
CMAKE_SYSTEM_NAME
CMAKE_SYSTEM_NAME
변수는 CMake가 인식한 시스템의 이름을 나타낸다. 이 변수는 크로스 컴파일 설정이나 플랫폼 별 빌드 설정에 유용하다.
if(${CMAKE_SYSTEM_NAME} STREQUAL "Linux")
# Linux-specific settings
endif()
CMAKE_SYSTEM_PROCESSOR
CMAKE_SYSTEM_PROCESSOR
변수는 컴파일 시 사용되는 프로세서의 이름을 나타낸다. 이는 아키텍처별 최적화나 특정 프로세서에 맞춘 빌드를 구성할 때 사용된다.
if(${CMAKE_SYSTEM_PROCESSOR} STREQUAL "x86_64")
# 64-bit specific settings
endif()
사용자 정의 변수
CMakeLists.txt에서는 내장 변수 외에도 사용자가 정의한 변수를 사용할 수 있다. 이러한 변수들은 프로젝트의 특정 요구 사항에 맞게 설정을 제어하는 데 활용된다.
option()
option()
명령어는 사용자 정의 변수로서, 사용자가 프로젝트를 구성할 때 특정 옵션을 켜거나 끌 수 있도록 한다.
option(USE_MY_FEATURE "Enable my feature" ON)
이 옵션은 USE_MY_FEATURE
변수를 ON
또는 OFF
상태로 설정할 수 있게 한다.
set()
set()
명령어는 특정 변수에 값을 할당하는데 사용된다. 이 변수들은 이후의 설정이나 빌드 과정에서 사용될 수 있다.
set(MY_VAR "MyValue")
이 설정은 MY_VAR
변수에 "MyValue"
를 할당하며, 이후에 다양한 명령에서 참조할 수 있다.
관련 자료:
- CMake 공식 문서: https://cmake.org/documentation/
- Mastering CMake 책 및 관련 자료
- 기타 온라인 CMake 튜토리얼 및 가이드