gpt4 book ai didi

c++ - CMake FetchContent 不复制库

转载 作者:行者123 更新时间:2023-11-30 03:16:07 32 4
gpt4 key购买 nike

我正在使用 CMake FetchContent 下载并构建第三方库(在本例中为 realsense2)。在尝试了官方文档 (https://cmake.org/cmake/help/v3.11/module/FetchContent.html) 中的 googletest 示例后,它的简单易用给我留下了深刻的印象。包括标题是神奇地完成的。现在使用 realsense2 SDK 我遇到了问题。

我需要像这样添加一个额外的 include_directories 命令:

FetchContent_Declare(
realsense2
GIT_REPOSITORY https://github.com/IntelRealSense/librealsense.git
GIT_TAG v2.23.0
)
FetchContent_MakeAvailable(realsense2)
FetchContent_GetProperties(realsense2)
if(NOT realsense2_POPULATED)
FetchContent_Populate(realsense2)
add_subdirectory(${realsense2_SOURCE_DIR} ${realsense2_BINARY_DIR})
endif()
//I should not be required to do this according to documentation
include_directories(${realsense2_SOURCE_DIR}/include)

如果我不这样做,将找不到某些 header 。关于这个问题有什么建议吗?

编辑:澄清一下,这是我添加库的方式:

target_link_libraries(TestExe gtest gtest_main)

和另一个完全一样,但这次它不是一个 exe,它是一个 dll

add_library(TestLib SHARED ${TestLib_HEADERS} ${TestLib_SOURCES} )
target_link_libraries(TestLib realsense2)

此时我更关心为什么我不必为 googletest 框架添加任何包含

最佳答案

FetchContent 的主要目的是保证调用时的内容

add_subdirectory(${Foo_SOURCE_DIR} ${Foo_BINARY_DIR})

“获取的”项目将(作为源)在 ${Foo_SOURCE_DIR} 目录中。

如何使用通过add_subdirectory包含的项目完全取决于该项目:

  1. 一些项目(包括 gtest)通过使用 target_include_directories 和其他命令将属性与其相关联,以“现代”CMake 方式创建库目标 Foo。因此,要使用这样的库,调用 target_link_libraries 就足够了。

  2. 一些其他项目需要 include_directoriestarget_link_libraries 才能使用它们。

  3. 最后,有许多项目在通过 add_subdirectory 包含时根本不起作用。所以 FetchContent 对他们来说意义不大。

只有一小部分项目描述了如何通过add_subdirectory 方法使用它们。 gtest 就在其中。

但大多数项目根本不描述这一点;如果您想对此类项目使用 add_subdirectory,则需要调查该项目的内部结构以了解其用法(或使用试错法)。

关于c++ - CMake FetchContent 不复制库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56593161/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com