CMake는 다양한 빌드 작업을 수행하기 위한 명령어들을 제공한다. 아래는 자주 사용되는 주요 CMake 명령어들과 그 설명이다.
project
project(<name> [LANGUAGES <languages>])
- 설명: 프로젝트의 이름과 사용 언어를 정의한다.
- 예시:
cmake project(MyProject LANGUAGES CXX)
add_executable
add_executable(<name> [WIN32] [MACOSX_BUNDLE] [EXCLUDE_FROM_ALL] <source1> [source2 ...])
- 설명: 실행 파일을 생성한다.
<name>
은 생성될 실행 파일의 이름이고, 나머지는 소스 파일들이다. - 예시:
cmake add_executable(MyExecutable main.cpp)
add_library
add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] <source1> [source2 ...])
- 설명: 정적 라이브러리(
STATIC
), 동적 라이브러리(SHARED
), 또는 모듈(MODULE
)을 생성한다. - 예시:
cmake add_library(MyLibrary STATIC lib.cpp)
target_link_libraries
target_link_libraries(<target> [item1 [item2 [...]]])
- 설명: 특정 실행 파일이나 라이브러리에 다른 라이브러리를 링크한다.
- 예시:
cmake target_link_libraries(MyExecutable MyLibrary)
set
set(<variable> <value> [CACHE <type> <docstring> [FORCE]])
- 설명: 변수를 설정한다.
CACHE
옵션을 사용해 캐시된 변수로 설정할 수 있다. - 예시:
cmake set(CMAKE_CXX_STANDARD 11)
find_package
find_package(<package> [version] [EXACT] [QUIET] [REQUIRED] [components...])
- 설명: 외부 패키지를 찾아서 설정을 가져온다.
REQUIRED
옵션을 사용하면 패키지가 없을 시 오류를 발생시킨다. - 예시:
cmake find_package(Boost 1.70 REQUIRED COMPONENTS filesystem system)
include_directories
include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])
- 설명: 컴파일 시 포함할 디렉토리를 지정한다.
SYSTEM
옵션은 시스템 헤더로 취급한다. - 예시:
cmake include_directories(${CMAKE_SOURCE_DIR}/include)
add_subdirectory
add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])
- 설명: 하위 디렉토리를 빌드에 포함시킨다. 하위 디렉토리에서 별도의 CMakeLists.txt 파일을 정의할 수 있다.
- 예시:
cmake add_subdirectory(src)
message
message([<mode>] "message text" [...])
- 설명: 메시지를 출력한다.
mode
로STATUS
,WARNING
,AUTHOR_WARNING
,SEND_ERROR
,FATAL_ERROR
를 사용할 수 있다. - 예시:
cmake message(STATUS "Configuring the project")
if / elseif / else / endif
if(expression) ... [elseif(expression) ...] [else() ...] endif()
- 설명: 조건문을 정의한다.
- 예시:
cmake if(CMAKE_BUILD_TYPE STREQUAL "Debug") set(DEBUG_MODE ON) endif()
foreach / endforeach
foreach(loop_var [items]) ... endforeach()
- 설명: 반복문을 정의한다.
- 예시:
cmake foreach(file ${source_files}) message(STATUS "Source file: ${file}") endforeach()
while / endwhile
while(condition) ... endwhile()
- 설명: 조건이 참일 때까지 반복문을 실행한다.
- 예시:
cmake while(condition) # commands endwhile()
configure_file
configure_file(<input> <output> [COPYONLY] [ESCAPE_QUOTES] [@ONLY])
- 설명: 파일을 복사하거나, 설정을 기반으로 파일을 생성한다.
- 예시:
cmake configure_file(config.h.in config.h)
install
install(TARGETS targets... [EXPORT export-name] [RUNTIME|LIBRARY|ARCHIVE|FRAMEWORK|BUNDLE|PRIVATE_HEADER|PUBLIC_HEADER|RESOURCE] [DESTINATION <dir>] [...])
- 설명: 빌드된 파일을 설치할 위치를 정의한다.
- 예시:
cmake install(TARGETS MyExecutable DESTINATION bin)
cmake_minimum_required
cmake_minimum_required(VERSION version [...])
- 설명: CMake의 최소 버전을 설정한다. 특정 버전 이상의 CMake에서만 프로젝트가 빌드되도록 한다.
- 예시:
cmake cmake_minimum_required(VERSION 3.10)
list
list(<operation> <list> <args>...)
- 설명: 리스트 변수를 관리하는 다양한 작업을 수행할 수 있다.
APPEND
,REMOVE_ITEM
,LENGTH
,GET
등의 작업이 가능한다. - 예시:
cmake list(APPEND my_list "item1" "item2")
관련 자료:
- Kitware Inc., CMake Documentation, https://cmake.org/cmake/help/latest/
- Martin, R., Mastering CMake, Kitware, Inc., 2010.
- Saxer, A., Professional CMake: A Practical Guide, Leanpub, 2020.