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