我正在使用 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)
Run Code Online (Sandbox Code Playgroud)
如果我不这样做,则找不到某些标题。关于这个问题有什么建议吗?
编辑:为了澄清,这就是我添加库的方式:
target_link_libraries(TestExe gtest gtest_main)
Run Code Online (Sandbox Code Playgroud)
另一个完全一样,但这次不是exe而是dll
add_library(TestLib SHARED ${TestLib_HEADERS} ${TestLib_SOURCES} )
target_link_libraries(TestLib realsense2)
Run Code Online (Sandbox Code Playgroud)
在这一点上我更关心为什么我不必为 googletest 框架添加任何包含
的主要目的FetchContent
是保证在通话时
add_subdirectory(${Foo_SOURCE_DIR} ${Foo_BINARY_DIR})
Run Code Online (Sandbox Code Playgroud)
“获取的”项目将(作为源)在${Foo_SOURCE_DIR}
目录中。
如何使用包含通过的项目add_subdirectory
完全取决于该项目:
一些项目(包括 gtest)Foo
通过使用target_include_directories
和其他命令将属性与其关联,以“现代”CMake 方式创建库目标。因此,要使用这样的库,只需调用target_link_libraries
.
其他一些项目需要两者include_directories
并target_link_libraries
与它们一起工作。
最后,有很多项目,当通过add_subdirectory
. 所以FetchContent
对他们来说意义不大。
只有一小部分项目描述了如何通过add_subdirectory
方法与他们合作。并且gtest
是其中之一。
但大多数项目根本没有描述这一点;如果您想add_subdirectory
与这样的项目一起使用,那么您需要调查该项目的内部结构以了解其用法(或使用反复试验)。
归档时间: |
|
查看次数: |
1960 次 |
最近记录: |