如何设置外部项目以下载不是.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 的各种变体,但没有任何成功。
答案 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/16544,https://gitlab.kitware.com/cmake/cmake/issues/17046。