我试图让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
,与此CMakeLists.txt
文件在同一目录中我放置了文件Flight3LCMLog-with_GF-2016-09-09_10-14-31.00.md5
在http://testdata.local/SoftwareTestData/AutomatedTests/%(algo)/%(hash)
(algo=md5
和hash=9aa3da7f7fc62ecf9108febe51a785e9
处)我放置了二进制文件。
我的消息行一直在我的本地构建路径中输出文件名。
当我检查网络服务器上的访问日志时,它甚至不会尝试查找该文件。
如何让CMake下载我的数据?我已经通过调试打印输出系统的ExternalData.cmake
文件,通过VTK查看他们是如何做到的,等等。但是没有运气。
答案 0 :(得分:0)
原来我上面的设置完全正确。缺少的步骤是将数据目标添加为测试的依赖项。
之前我通过构建测试并使用ctest
运行测试来测试这一点 - 它显然会失败。
添加:
add_dependencies(it_GfFull it_GfFullData)
现在,在构建测试时,它会下载文件。
当ctest
调用我的测试时,DATA{Flight3LCMLog-with_GF-2016-09-09_10-14-31.00}
仍会扩展到令我困惑的原始本地路径,但现在该文件已下载,它是实际数据文件的符号链接。
如果没有add_dependencies
步骤,我将不得不确保构建数据目标。我错误地认为ExternalData_Add_Test
函数以某种方式确保调用下载目标。