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

posted @ 2023-05-24 20:58  blogzzt  阅读(333)  评论(0编辑  收藏  举报