cmake ExternalProject_Add如何下载URL非tar文件?

时间:2017-07-08 21:58:49

标签: cmake catch-unit-test

如何设置外部项目以下载不是.tgz文件的链接?

例如Catch提供的发布是单个标头分发。我想下载这个而不是git repo或.tgz版本。但我还没弄明白如何告诉CMake这样做。

我想做点什么:

Include(ExternalProject)
ExternalProject_Add(
    catch
    PREFIX ${CMAKE_BINARY_DIR}/catch
    URL https://github.com/philsquared/Catch/releases/download/v1.9.6/catch.hpp ${CMAKE_BINARY_DIR}/catch
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    LOG_DOWNLOAD ON
)

由于URL假定url是压缩的tar文件,因此失败。我尝试了 DOWNLOAD_COMMAND 的各种变体,但没有任何成功。

1 个答案:

答案 0 :(得分:3)

使用ExternalProject_Add DOWNLOAD_NO_EXTRACT 选项:

  

只需下载文件,不要解压缩;下载文件的完整路径以< DOWNLOADED_FILE>。

的形式提供

代码示例:

ExternalProject_Add(
    catch
    PREFIX ${CMAKE_BINARY_DIR}/catch
    URL https://github.com/philsquared/Catch/releases/download/v1.9.6/catch.hpp
    DOWNLOAD_NO_EXTRACT 1
    CONFIGURE_COMMAND ""
    BUILD_COMMAND ""
    INSTALL_COMMAND ""
    )

文件将被下载到<prefix>/src目录。

如果在 DOWNLOAD_NO_EXTRACT 旁边使用 LOG_DOWNLOAD 选项,则需要使用CMake 3.9才能正常工作。请参阅以下错误报告:https://gitlab.kitware.com/cmake/cmake/issues/16544https://gitlab.kitware.com/cmake/cmake/issues/17046