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

cmake ExternalProject_Add how to download URL non-tar file?

如何设置外部项目来下载 link 不是 .tgz 文件?

例如 Catch 提供了一个版本,它是一个单一的头文件分发。我只想下载这个而不是 git 存储库或 .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 的各种变体,但都没有成功。

使用 DOWNLOAD_NO_EXTRACT 选项 ExternalProject_Add:

Just download the file and do not extract it; the full path to the downloaded file is available as <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.