【发布时间】:2020-07-27 18:47:44
【问题描述】:
我问的问题基本上和here 一样。然而这个问题没有得到回答。
我想在我的项目中使用 googletest。为此,我使用 ExternalProject_Add(),它使用 git 克隆测试套件。之后,我喜欢使用add_subdirectory()。
这也是official repository 中描述的内容。这种方法的好处是,googletest 中的构建脚本自己处理构建过程。
但问题是,add_subdirectory() 找不到源文件夹,因为它从一开始就不存在。所以add_subdirectory()应该依赖于ExternalProject_Add()的补全。
是否可以使 add_subdirectory() 依赖于 ExternalProject_Add(),就像 add_dependencies() 对目标所做的那样?
附言。如果我将 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})
【问题讨论】:
-
使用
ExternalProject_Add()添加的项目仅在构建时下载,IIRC。 -
Here is 完整的带有依赖关系的工作示例。
-
在我尝试之前,我不愿意将其作为答案,但 FetchContent 似乎是您真正想要的 CMake 命令。这是 3.11 中的新功能。
-
@John,我认为这正是值得接受的答案。
-
@dani 和 @Bikineev,我扩展了我的原始答案以包含更多讨论和
FetchContent。
标签: cmake googletest external-project