2016-11-03 45 views
0

我试图让cmake的按照在this blog无法获得的CMake的ExternalData下载

建议下载我需要为我测试的外部数据,但不管我怎么努力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=md5hash=9aa3da7f7fc62ecf9108febe51a785e9)相同的目录,我把二进制文件。

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

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

我怎样才能让CMake下载我的数据?我一直在使用调试打印输出填充系统的ExternalData.cmake文件,通过VTK查看它们是如何执行的,等等。但是没有运气。

回答

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函数在某种程度上负责确保下载目标被调用。