首页 > 解决方案 > Cmake FetchContent 在不同的目录中有源代码和二进制文件吗?

问题描述

我想重用FetchContent声明的外部库的源文件夹,以避免多次下载多个构建配置(debug/release/android/emscripten)。澄清一下,构建配置具有不同的二进制目录,例如 /build/debug、build/release... 理想的解决方案是在{CMAKE_SOURCE_DIR}/ext中拥有外部依赖的来源,在 {CMAKE_BINARY_DIR} /中拥有二进制目录${name}-构建

使用FETCHCONTENT_BASE_DIR时(参见下面的示例),源目录被共享,但二进制目录也被共享,每当我在构建配置之间切换时都会触发完全重建。

FetchContent_Populate也有BINARY_DIR参数,但似乎没有给出预期的结果。

set(FETCHCONTENT_BASE_DIR ${CMAKE_SOURCE_DIR}/depenendencies)
FetchContent_Declare(
  ${name}
  GIT_REPOSITORY ${url}
  GIT_TAG ${tag}
  GIT_PROGRESS ON
)

FetchContent_GetProperties(${name})
if (NOT ${name}_POPULATED)
  FetchContent_Populate(
  ${name}
)
add_subdirectory(${${name}_SOURCE_DIR} ${${name}_BINARY_DIR})

标签: c++cmake

解决方案


推荐阅读