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

Tal*_*Tal 3 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
)
Run Code Online (Sandbox Code Playgroud)

这将失败,因为 URL 假定 url 是压缩的 tar 文件。我尝试了DOWNLOAD_COMMAND 的各种变体,但都没有成功。

Tsy*_*rev 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 ""
    )
Run Code Online (Sandbox Code Playgroud)

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


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