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

标签 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
)

这失败了,因为 URL 假设 url 是一个压缩的 tar 文件。我尝试了 DOWNLOAD_COMMAND 的各种变体,但均未成功。

最佳答案

使用 ExternalProject_AddDOWNLOAD_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/

相关文章:

c++ - 捕获测试用例顺序

c++ - 使用 Catch C++ 进行单元测试会干扰我的 main()

c++ - C++ 中的异常和 BDD - Catch 库

c++ - Catch lib(单元测试)和 CTest(CMake)集成

c# - 如何从 .NET Core 调用 cygwin 编译的 C++?

c++ - 在CMake项目下编译单个文件?

android - 找不到参数的方法 cppFlags() arguments()

c++ - 如何在 CMake CONFIG 生成器表达式中指定多个配置?

c++ - 为什么我们需要用Catch单独编译一个主测试文件?

linux - 使用 vcpkg 安装 ffmpeg