cmake——引入外部项目之FetchContent
在cmake3.11以及以上的版本,cmake又为我们提供了一种Configure过程引入外部项目的方法--FetchContent。
使用FetchContent的步骤总结起来就是:
- 使用FetchContent_Declare(MyName) 获取项目。可以是一个URL也可以是一个Git仓库。
- 使用FetchContent_GetProperties(MyName) 获取我们需要的变量MyName_*。
- 使用add_subdirectory(${MyName_SOURCE_DIR} ${MyName_BINARY_DIR})引入项目。
在cmake3.14版本,官方又为我们提供了更方便的FetchContent_MakeAvailable方法,将步骤2,3集成在了一起。为了兼容3.11版本,我们可以把它封装成一个宏,这样我们就可以统一使用FetchContent_MakeAvailable方法了。
例如:
# 添加第三方依赖包 include(FetchContent) # FetchContent_MakeAvailable was not added until CMake 3.14 if(${CMAKE_VERSION} VERSION_LESS 3.14) include(add_FetchContent_MakeAvailable.cmake) endif() set(SPDLOG_GIT_TAG v1.4.1) # 指定版本 set(SPDLOG_GIT_URL https://github.com/gabime/spdlog.git) # 指定git仓库地址 FetchContent_Declare( spdlog GIT_REPOSITORY ${SPDLOG_GIT_URL} GIT_TAG ${SPDLOG_GIT_TAG} ) FetchContent_MakeAvailable(spdlog)
有时候,已经本地下载了库的源码,这时候注释掉 FetchContent_Declare()中的这些部分,如下所示
FetchContent_Declare(
spdlog
# GIT_REPOSITORY ${SPDLOG_GIT_URL}
# GIT_TAG ${SPDLOG_GIT_TAG}
)
参考:https://zhuanlan.zhihu.com/p/102050750
https://cmake.org/cmake/help/latest/module/FetchContent.html