当项目的存储库不是我要使用的库的根目录,但实际上包含两个目录,每个目录都是我要在项目中使用的存储库的根目录时,如何在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/

10-13 05:16