CMakeLists.txt
파일은 CMake에서 프로젝트를 정의하고 구성하는 데 사용되는 주요 구성 파일이다. 이 파일은 프로젝트의 구조, 빌드 설정, 종속성 등을 정의한다. 다음은 CMakeLists.txt
에서 프로젝트를 정의하는 방법에 대한 자세한 설명이다.
프로젝트 이름 정의
CMake에서 프로젝트를 정의할 때 가장 먼저 해야 할 일은 프로젝트의 이름을 설정하는 것이다. 이는 project()
명령어를 통해 이루어진다.
project(MyProject)
project()
명령어는 CMake에게 현재 디렉터리와 하위 디렉터리에서 빌드되는 코드가 하나의 프로젝트에 속함을 알려준다. 이 명령어는 기본적으로 다음의 요소들을 정의한다:
- 프로젝트 이름: 프로젝트의 고유 이름이다.
- 언어: 이 프로젝트에서 사용할 프로그래밍 언어를 정의한다. 명시하지 않으면 CMake는 사용된 소스 파일에 따라 자동으로 감지한다.
언어를 명시적으로 설정하고자 한다면 다음과 같이 사용할 수 있다:
project(MyProject CXX C)
위의 예에서는 C++ (CXX
)와 C (C
)를 프로젝트의 언어로 설정 하였다.
프로젝트 버전과 설명
CMake는 프로젝트의 버전과 설명을 추가로 정의할 수 있다. 이는 project()
명령어의 옵션으로 제공된다.
project(MyProject VERSION 1.0 DESCRIPTION "This is my project")
여기서 VERSION
옵션은 프로젝트의 버전을 지정하고, DESCRIPTION
옵션은 프로젝트에 대한 설명을 추가한다. 이 정보는 다른 CMake 명령어에서 사용될 수 있다.
패키지 관리 및 종속성 설정
CMake는 프로젝트의 종속성을 관리하기 위해 여러 명령어를 제공한다. 가장 일반적으로 사용되는 것은 find_package()
이다.
find_package(SomeLibrary REQUIRED)
find_package()
명령어는 외부 라이브러리나 패키지를 검색하여 프로젝트에 추가한다. REQUIRED
옵션을 사용하면 해당 패키지가 필수임을 나타내며, 찾지 못할 경우 CMake는 오류를 발생시킨다.
또한 find_package()
는 선택적으로 컴포넌트를 지정할 수도 있다.
find_package(SomeLibrary COMPONENTS component1 component2 REQUIRED)
이 경우 component1
과 component2
가 포함된 SomeLibrary
패키지를 찾아야 한다.
빌드 구성 설정
CMakeLists.txt
는 프로젝트의 빌드 설정을 정의하는 데 사용된다. add_executable()
과 add_library()
명령어가 이에 해당한다.
add_executable(MyExecutable main.cpp)
이 명령어는 main.cpp
파일을 기반으로 MyExecutable
이라는 실행 파일을 생성한다.
add_library(MyLibrary STATIC lib.cpp)
이 명령어는 lib.cpp
파일을 기반으로 MyLibrary
라는 정적 라이브러리를 생성한다. 라이브러리는 정적(STATIC
), 동적(SHARED
), 또는 모듈(MODULE
)로 생성될 수 있다.
타겟 설정
CMake에서 타겟(target)은 빌드의 최종 산출물이다. add_executable()
이나 add_library()
로 생성된 타겟은 추가 설정이 가능한다. target_include_directories()
, target_link_libraries()
등의 명령어가 사용된다.
target_include_directories(MyExecutable PRIVATE include/)
target_link_libraries(MyExecutable MyLibrary)
위의 예에서는 MyExecutable
타겟에 대해 include/
디렉터리를 포함 디렉터리로 추가하고, MyLibrary
를 링크 라이브러리로 추가 하였다.
사용자 정의 옵션 및 설정
CMake는 option()
명령어를 사용하여 사용자 정의 옵션을 만들 수 있다. 이는 프로젝트 빌드 시 사용자가 특정 기능을 활성화하거나 비활성화할 수 있도록 한다.
option(ENABLE_FEATURE "Enable this feature" ON)
이 명령어는 ENABLE_FEATURE
라는 옵션을 생성하며, 기본값은 ON
이다. 이 옵션의 값은 사용자가 빌드 시에 변경할 수 있다.
관련 자료:
- CMake 공식 문서: https://cmake.org/documentation/
- CMake Tutorial: https://cmake.org/cmake/help/latest/guide/tutorial/index.html