如何设置外部项目来下载不是 .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 的各种变体,但均未成功。
最佳答案
使用 ExternalProject_Add
的DOWNLOAD_NO_EXTRACT 选项:
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 .
关于cmake ExternalProject_Add 如何下载 URL 非 tar 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44991101/