3

如何设置外部项目来下载不是 .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的各种变体,但也没有任何成功。

4

1 回答 1

6

使用DOWNLOAD_NO_EXTRACT选项ExternalProject_Add

只需下载文件,不要解压;下载文件的完整路径以 <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目录中。


如果将LOG_DOWNLOAD选项与DOWNLOAD_NO_EXTRACT一起使用,则需要 CMake 3.9 才能正常工作。请参阅这些错误报告:https : //gitlab.kitware.com/cmake/cmake/issues/16544、https: //gitlab.kitware.com/cmake/cmake/issues/17046

于 2017-07-09T08:51:17.830 回答