FetchContent
FetchContent는 CMake 3.11에 새로 추가된 명령어입니다. 대부분의 언어들은 외부 라이브러리들을 사용하기 위해 라이브러리 설치 또는 종속성 추가를 쉽게 할 수 있는 기능을 제공하고 있습니다. 예를 들면, Java의 maven이나 gradle, Python의 pip 등입니다. 하지만, C++에는 그런 기능이 없었기 때문에 외부 라이브러리를 사용하기 위해서는 아주 까다로운 설정이 필요했었습니다.
이제 FetchContent 명령어를 통해 CMake에서도 외부 라이브러리들을 쉽게 설치하고 사용할 수 있게 되었습니다.
ExternalProject과 차이
CMake 3.11 버전 이전에도 ExternalProject 명령어를 이용해서 외부 라이브러리를 사용할 수 있었습니다. 하지만, ExternalProject 명령어는 빌드 타임에 외부 라이브러리를 가져오지만, FetchContent는 CMake 실행 시점에 외부 라이브러리를 가져온다는 점에서 차이가 있습니다.
FetchContent 사용 예제
CMakeLists.txt 파일에 다음 명령어를 이용해서 외부 라이브러리를 가져올 수 있습니다. 여기서는 nlohnmann json를 예시로 작성했습니다.
include(FetchContent)
FetchContent_Declare(json
GIT_REPOSITORY https://github.com/nlohmann/json
GIT_TAG v3.10.5
GIT_PROGRESS TRUE
GIT_SHALLOW TRUE)
FetchContent_MakeAvailable(json)
CMakeLists.txt 전체 코드
cmake_minimum_required(VERSION 3.21)
project(nhlomann_json_example)
set(CMAKE_CXX_STANDARD 14)
include(FetchContent)
FetchContent_Declare(json
GIT_REPOSITORY https://github.com/nlohmann/json
GIT_PROGRESS TRUE
GIT_SHALLOW TRUE
GIT_TAG v3.10.5)
FetchContent_MakeAvailable(json)
add_executable(nhlomann_json_example main.cpp)
target_link_libraries(nhlomann_json_example
PRIVATE nlohmann_json::nlohmann_json)
main.cpp
그 이후에는 아래와 같이 nlohmann/json.hpp 파일 등을 include해서 사용할 수 있습니다.
#include <iostream>
#include <nlohmann/json.hpp>
int main() {
std::cout << "Hello, World!" << std::endl;
// ...
return 0;
}
참고사이트
'Development > CMake' 카테고리의 다른 글
CMake - 정적 라이브러리 링크하기 (0) | 2022.09.06 |
---|---|
Ninja(닌자) 빌드 시스템 이해하기 (0) | 2022.04.23 |
CMakeLists.txt 파일 기본 골격 만들기 (0) | 2022.04.23 |