【问题标题】:Can't get CMake's ExternalData to download无法下载 CMake 的 ExternalData
【发布时间】:2016-11-04 06:00:00
【问题描述】:

我正在尝试让 cmake 按照this blog 的建议下载测试所需的外部数据

但无论我尝试什么,CMake 都会一直引用一个不存在的本地文件。我的 CMake 代码是:

include(ExternalData)
set(ExternalData_URL_TEMPLATES
   "http://testdata.local/SoftwareTestData/AutomatedTests/%(algo)/%(hash)"
)

ExternalData_Add_Test(it_GfFullData
   NAME it_GfFull
   COMMAND it_GfFull --input DATA{Flight3LCMLog-with_GF-2016-09-09_10-14-31.00} -t 10 -g 10190 -G 17000
)
ExternalData_Add_Target(it_GfFullData)

ExternalData_Expand_Arguments(it_GfFullData realpath  DATA{Flight3LCMLog-with_GF-2016-09-09_10-14-31.00})
message(STATUS "data = ${realpath}")

我的文件的 md5 哈希是9aa3da7f7fc62ecf9108febe51a785e9,与我放置文件Flight3LCMLog-with_GF-2016-09-09_10-14-31.00.md5 的这个CMakeLists.txt 文件在同一目录中

在http://testdata.local/SoftwareTestData/AutomatedTests/%(algo)/%(hash)(algo=md5 和hash=9aa3da7f7fc62ecf9108febe51a785e9)我放置了二进制文件。

我一直在本地构建路径中输出文件名的那条消息行。

当我检查网络服务器上的访问日志时,它甚至不会尝试查找文件。

如何让 CMake 下载我的数据?我一直在用调试打印输出填充系统的ExternalData.cmake 文件,通过 VTK 看看他们是如何做到的,等等。但还没有运气。

【问题讨论】:

    标签: cmake


    【解决方案1】:

    事实证明,我上面的设置几乎是正确的。缺少的步骤是将数据目标作为依赖项添加到测试中。

    之前我通过构建测试并使用ctest 运行它来测试它——显然它会失败。

    通过添加:

    add_dependencies(it_GfFull it_GfFullData)
    

    现在,构建测试后,它将下载文件。

    当ctest 调用我的测试时,DATA{Flight3LCMLog-with_GF-2016-09-09_10-14-31.00} 仍会扩展为令我困惑的原始本地路径,但现在文件已下载,它是实际数据文件的符号链接。

    如果没有add_dependencies 步骤,我将不得不确保构建数据目标。我误以为ExternalData_Add_Test 函数以某种方式负责确保调用下载目标。

    【讨论】:

      猜你喜欢
      • 2021-01-14
      • 2019-01-05
      • 2013-04-25
      • 2022-12-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-22
      • 2021-09-14
      相关资源
      最近更新 更多