프로젝트 이름과 버전 설정
CMake 프로젝트는 project()
명령어를 사용하여 시작된다. 이 명령어는 프로젝트의 이름과 선택적으로 버전을 지정한다. 이 프로젝트 이름은 이후 설정에서 여러 번 참조될 수 있다.
project(MyProject VERSION 1.0)
여기서 MyProject
는 프로젝트 이름이며, 1.0
은 버전 번호이다.
CMake 최소 요구 버전 지정
CMakeLists.txt 파일의 상단에는 일반적으로 cmake_minimum_required()
명령어가 위치한다. 이 명령어는 프로젝트를 빌드하는 데 필요한 CMake의 최소 버전을 지정한다. 이는 CMake의 호환성을 보장하는 데 중요하다.
cmake_minimum_required(VERSION 3.10)
이 명령어는 CMake 3.10 이상의 버전이 필요함을 의미한다.
실행 파일 또는 라이브러리 생성
CMake는 add_executable()
및 add_library()
명령어를 사용하여 실행 파일과 라이브러리를 생성할 수 있다. 이러한 명령어는 빌드할 소스 파일들을 지정한다.
add_executable(MyExecutable main.cpp)
add_library(MyLibrary STATIC library.cpp)
add_executable()
명령어는 main.cpp
를 컴파일하여 MyExecutable
실행 파일을 생성한다. add_library()
명령어는 library.cpp
를 사용하여 정적 라이브러리 MyLibrary
를 생성한다.
타깃 링크 라이브러리 지정
프로그램이 외부 라이브러리를 사용할 경우, target_link_libraries()
명령어를 사용하여 이들을 지정할 수 있다. 이 명령어는 실행 파일 또는 라이브러리와 함께 링크할 라이브러리를 지정한다.
target_link_libraries(MyExecutable PRIVATE MyLibrary)
위의 예에서는 MyExecutable
이 MyLibrary
와 링크된다.
타깃 포함 디렉토리 설정
소스 파일이 프로젝트의 다른 디렉토리나 외부 디렉토리에 있는 헤더 파일을 포함해야 할 경우, target_include_directories()
명령어를 사용하여 포함 디렉토리를 설정할 수 있다.
target_include_directories(MyExecutable PRIVATE include/)
이 명령어는 include/
디렉토리를 MyExecutable
의 포함 디렉토리로 설정한다.
컴파일 옵션 설정
target_compile_options()
명령어를 사용하여 특정 타깃에 대해 컴파일러 옵션을 설정할 수 있다. 이 명령어는 컴파일 과정에서 추가적인 플래그를 전달하는 데 유용하다.
target_compile_options(MyExecutable PRIVATE -Wall -Wextra)
위의 예에서는 MyExecutable
이 컴파일될 때 경고 메시지를 활성화하는 -Wall
및 -Wextra
플래그가 사용된다.
설치 규칙 지정
프로젝트의 빌드 결과물을 설치하려면 install()
명령어를 사용하여 설치 규칙을 지정할 수 있다. 이 명령어는 파일을 특정 디렉토리에 설치할 수 있도록 한다.
install(TARGETS MyExecutable DESTINATION bin)
이 예에서는 MyExecutable
이 bin
디렉토리에 설치된다.
옵션 설정
option()
명령어를 사용하여 사용자가 빌드 시 선택할 수 있는 옵션을 정의할 수 있다. 이 명령어는 프로젝트에서 특정 기능을 켜거나 끌 수 있게 한다.
option(ENABLE_TESTS "Enable test build" ON)
위의 예에서는 ENABLE_TESTS
라는 옵션을 정의하며, 기본값은 ON
이다.
조건부 구성
CMake는 if()
, elseif()
, else()
명령어를 사용하여 조건부 구성을 지원한다. 이 명령어는 특정 조건에 따라 다른 설정을 적용하는 데 사용된다.
if(ENABLE_TESTS)
add_subdirectory(tests)
endif()
이 예에서는 ENABLE_TESTS
옵션이 켜져 있을 경우 tests
디렉토리를 추가하여 테스트 빌드를 설정한다.
관련 자료:
- https://cmake.org/cmake/help/latest/manual/cmake.1.html
- https://cmake.org/cmake/help/latest/command/project.html
- https://cmake.org/cmake/help/latest/command/cmake_minimum_required.html
- https://cmake.org/cmake/help/latest/command/add_executable.html
- https://cmake.org/cmake/help/latest/command/target_link_libraries.html
- https://cmake.org/cmake/help/latest/command/install.html
- https://cmake.org/cmake/help/latest/command/option.html