如何找到通过FetchContent下载的包的源目录?

Dan*_* V. 8 cmake

我在内部创建了多个链接到图像的静态库。

我想使用一个通过使用 检索的外部库FetchContent_Declare

proj
  /lib1
    CMakeList.txt
  /lib2
    CMakeList.txt
  /exe
    CMakeList.txt
  /external
    CMakeList.txt (FetchContent_Declare)
  /build
    /deps
      /externallib1 (auto generated)
  CMakeList.txt
Run Code Online (Sandbox Code Playgroud)

我想在 /proj/CMakeList 中使用以下内容:

include_directories(externallib1/include)
Run Code Online (Sandbox Code Playgroud)

但我不知道如何找出外部库实际下载的目录?

squ*_*les 14

FetchContent 模块提供了两种主要方法来在主 CMake 构建中填充外部包的内容:

无论您使用哪种方法,<lcname>_SOURCE_DIR都应该定义包的变量,该变量指向下载外部包的顶级源目录。在本例中,<lcname>是提供给上述命令之一的包的小写名称。

CMake 通常会将外部包下载到您的构建目录中:

${CMAKE_BINARY_DIR}/_deps/<package-name>-src
Run Code Online (Sandbox Code Playgroud)

但您可以使用上述<lcname>_SOURCE_DIR变量来引用该位置。

例如,对于googletest,一种简单的用法可能如下所示:

include(FetchContent)
FetchContent_Declare(
  googletest
  GIT_REPOSITORY https://github.com/google/googletest.git
  GIT_TAG        release-1.8.0
)
FetchContent_MakeAvailable(googletest)
Run Code Online (Sandbox Code Playgroud)

因此,该googletest_SOURCE_DIR变量将指向下载的存储库的顶级源目录googletest,并且您可以googletest使用如下所示的内容包含标头:

include_directories(${googletest_SOURCE_DIR}/googletest/include/gtest)
Run Code Online (Sandbox Code Playgroud)