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 的各种变体,但都没有成功。
使用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/16544,https://gitlab.kitware.com/cmake/cmake/issues/17046。