CMake는 소프트웨어 빌드를 구성하기 위한 크로스 플랫폼 도구이다. CMakeLists.txt 파일은 CMake 프로젝트의 구성을 정의하는데, 이 파일에서 사용되는 내장 변수들은 프로젝트의 설정과 빌드 과정을 제어하는 중요한 역할을 한다. 이 문서에서는 CMakeLists.txt에서 자주 사용되는 내장 변수들을 계층적으로 설명한다.

프로젝트 설정 관련 변수

CMakeLists.txt에서 프로젝트의 기본적인 속성을 설정하기 위해 사용되는 변수들이다.

PROJECT_NAME

PROJECT_NAME 변수는 project() 명령어에 의해 설정된다. 이 변수는 프로젝트의 이름을 나타내며, 프로젝트 내에서 다른 설정들에 쉽게 접근할 수 있도록 한다.

project(MyProject)

위와 같은 설정이 있을 경우, PROJECT_NAMEMyProject가 된다.

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 튜토리얼 및 가이드