dan*_*ani 5 cmake googletest external-project
我基本上问了与在这里问过的问题相同的问题。然而,这个问题还没有得到回答。
我想在我的项目中使用 googletest。为此,我使用 ExternalProject_Add(),它使用 git 克隆测试套件。之后,我喜欢使用add_subdirectory().
这也是官方存储库中描述的内容。这种方法的好处是,googletest 中的构建脚本自己处理构建过程。
然而,问题是add_subdirectory()找不到源文件夹,因为它从一开始就不存在。因此,add_subdirectory()应视完成情况而定ExternalProject_Add()。
是否可以像 add_dependencies() 那样add_subdirectory()依赖ExternalProject_Add()于目标?
附注。如果我注释掉add_subdirectory(),构建它(由于缺少 googletest 库而以错误结束),取消注释并再次构建它(成功),我可以使其全部编译。
ExternalProject_Add(
googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG master
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
TEST_COMMAND ""
)
ExternalProject_Get_Property(googletest source_dir binary_dir)
set(GTEST_INCLUDE_DIR ${source_dir}/googletest/include)
set(GMOCK_INCLUDE_DIR ${source_dir}/googlemock/include)
add_subdirectory(${source_dir}
${binary_dir})
Run Code Online (Sandbox Code Playgroud)
我使用本教程来实现这一点。只需将ExternalProject代码放在一个单独的文件中,输入“CMakeLists.txt.dependency”,然后使用execute_process. 我configure_file首先使用将配置信息注入外部项目并将其复制到构建树中。
configure_file(CMakeLists.txt.dependency.in dependency/CMakeLists.txt)
execute_process(COMMAND "${CMAKE_COMMAND}" -G "${CMAKE_GENERATOR}" .
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/dependency" )
execute_process(COMMAND "${CMAKE_COMMAND}" --build .
WORKING_DIRECTORY "${CMAKE_BINARY_DIR}/dependency" )
Run Code Online (Sandbox Code Playgroud)
请注意,本教程的ExternalProject代码位于单独的CMakeLists.txt文件中。官方文档也是如此gtest。这是因为ExternalProject在构建时运行,而不是配置时运行。这是在配置时使用的一种技巧,方法ExternalProject是将其放入第三个项目中,并在主要 CMake 配置步骤的中间执行单独的 CMake+build 运行。
在 3.11 版本中,CMake 添加了一个FetchContent命令。我没有使用过它,但文档使它看起来像是ExternalProject. 这将在配置时获取内容,使其可用于以后的add_subdirectory命令。
和命令对于少量小的和/或模糊的依赖关系可以正常工作ExternalProject。FetchContent如果您的依赖项超过 2 个、较大和/或流行,我建议您查看像Conan这样的依赖项管理器。它与 CMake 配合得很好。
| 归档时间: |
|
| 查看次数: |
1396 次 |
| 最近记录: |