我正在使用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)
如果我不这样做,则找不到某些标头。关于这个问题有什么建议吗?
编辑:为澄清起见,这就是我添加库的方式:
target_link_libraries(TestExe gtest gtest_main)
和其他完全相同,但是这次它不是一个exe而是dll
add_library(TestLib SHARED ${TestLib_HEADERS} ${TestLib_SOURCES} )
target_link_libraries(TestLib realsense2)
在这一点上,我更担心为什么我不必为googletest框架添加任何包含内容
答案 0 :(得分:1)
FetchContent
的主要目的是在通话时提供保证金
add_subdirectory(${Foo_SOURCE_DIR} ${Foo_BINARY_DIR})
“获取的”项目(作为源)将位于${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
这样的项目之一,则需要研究该项目的内部知识以了解其用法。或使用试错法。