【问题标题】:CMake - eliminate obsolete 3rd-party library downloadCMake - 消除过时的 3rd-party 库下载
【发布时间】:2015-11-24 21:11:18
【问题描述】:

我将 gtest 作为外部项目添加到我的项目中,并用于全新安装 我下载并重新编译它,如下面的代码所示。我工作得很好,但是在每一个开发步骤中,当我添加一个测试用例、检查存储库、延迟执行以及当我离线时,甚至 make 步骤都会失败。 我如何解释 CMake,仅当我从头开始构建表单时才需要此下载、检查等? (即当 gtest 可用时,不需要任何操作?)

# Add gtest
ExternalProject_Add(
    googletest
    SVN_REPOSITORY http://googletest.googlecode.com/svn/trunk/
    SVN_REVISION -r 660
    TIMEOUT 10
    PATCH_COMMAND svn patch ${CMAKE_SOURCE_DIR}/gtest.patch ${CMAKE_BINARY_DIR}/ThirdParty/src/googletest
    # Force separate output paths for debug and release builds to allow easy
    # identification of correct lib in subsequent TARGET_LINK_LIBRARIES commands
    CMAKE_ARGS -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
               -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG:PATH=DebugLibs
               -DCMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE:PATH=ReleaseLibs
               -Dgtest_force_shared_crt=ON
    # Disable install step
    INSTALL_COMMAND ""
    # Wrap download, configure and build steps in a script to log output
    LOG_DOWNLOAD ON
    LOG_CONFIGURE ON
    LOG_BUILD ON)

【问题讨论】:

  • 只需将 parameter 添加到您的 CMake 脚本中,这将表示应该使用本地版本的 gtest 而不是下载。

标签: download cmake googletest


【解决方案1】:

ExternalProject_Add 函数具有UPDATE_COMMAND 选项。将此选项设置为空字符串"",就像您对INSTALL_COMMAND 所做的那样,禁用更新步骤。

根据 CMake 3.4 的documentation,还有一个UPDATE_DISCONNECTED 选项可以实现相同的结果。我自己没有尝试过,所以我不确定它是否像我理解的那样有效。

【讨论】:

  • 您也可以尝试在 cmake 阶段而不是构建阶段让 CMake 下载 gtest,然后使用 add_subdirectory() 使 gtest 成为您实际构建的一部分。这不仅具有将下载移至 cmake 阶段的优势。详情请见here
猜你喜欢
  • 2017-08-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多