当项目的存储库不是我要使用的库的根目录,但实际上包含两个目录,每个目录都是我要在项目中使用的存储库的根目录时,如何在CMake中添加外部项目?
我正在努力建立一个使用Google Test和Mock进行测试的CMake框架项目,但是,当我尝试使用ExternalProject_Add
下载google测试存储库(https://github.com/google/googletest)时,它抱怨无法找到构建版本项目的来源。好吧,这是因为Google已经将googletest和googlemock合并到一个项目中,但现在是两个项目。
回购的一些文件结构:
googletest-master/
├──[...no CMakeFiles.txt exists here...]
├──googletest/
│ ├──src/
│ └──CMakeFiles.txt
└──googlemock/
├──src/
└──CMakeFiles.txt
当我执行以下操作时...
ExternalProject_Add(
gtest
GIT_REPOSITORY https://github.com/google/googletest.git
TIMEOUT 10
INSTALL_COMMAND ""
LOG_DOWNLOAD ON
LOG_CONFIGURE ON
LOG_BUILD ON
PREFIX "googletest-master"
)
...它将实际的存储库下载到
googletest-master/src/gtest
,因为我为存储库添加了“ googletest-master”前缀,以使其脱离我的主要源代码,并且假定我正在下载仅是源代码和该源位于根目录中。所以我想完成两件事:
将存储库下载到googletest-master目录中,就像我在其中克隆存储库,或从GitHub下载zip并将其解压缩一样。
在我的CMake项目中建立并包含googletest和googlemock
最佳答案
您只需要一个下载步骤,但是需要两个构建步骤。不同的ExternalProject_add
命令调用不能共享步骤,但是您可以将所有这些步骤安排到不同的调用中,它们之间具有适当的依赖性:
# Single download(git clone)
ExternalProject_Add(
googletest-master
DOWNLOAD_DIR "googletest-master/src" # The only dir option which is required
GIT_REPOSITORY https://github.com/google/googletest.git
TIMEOUT 10
LOG_DOWNLOAD ON
# Disable all other steps
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)
# Build gtest from existing sources
ExternalProject_Add(
gtest
DOWNLOAD_COMMAND "" # No download required
SOURCE_DIR "googletest-master/src/googletest" # Use specific source dir
PREFIX "googletest-master" # But use prefix for compute other dirs
INSTALL_COMMAND ""
LOG_CONFIGURE ON
LOG_BUILD ON
)
# gtest should be build after being downloaded
add_dependencies(gtest googletest-master)
# Build gmock from existing sources
ExternalProject_Add(
gmock
DOWNLOAD_COMMAND "" # No download required
SOURCE_DIR "googletest-master/src/googlemock" # Use specific source dir
PREFIX "googletest-master" # But use prefix for compute other dirs
INSTALL_COMMAND ""
LOG_CONFIGURE ON
LOG_BUILD ON
)
# gmock should be build after being downloaded
add_dependencies(gmock googletest-master)
关于github - repo (googletest)具有多个库时,如何处理CMake ExternalProject?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33230792/