CMake ExternalData自定义获取脚本

3

介绍

我有一个项目,其中包含一个名为“tests”的目标,需要在运行时存在来自远程源的一些提取的资源。目前,我已经使用ExternalData,在构建时从远程URL检索一个压缩文件并将其放置到构建树中。

/tests/CMakeLists.txt :

include(ExternalData)
set(ExternalData_URL_TEMPLATES "https://data.com/path/samples.zip")

# [...]

ExternalData_Add_Test(MyData
   NAME MyTest
   COMMAND MyProjectTests DATA{samples.zip})
ExternalData_Add_Target(MyData)

在源代码树中,有一个文件/tests/samples.zip.md5,其中包含了该压缩档案的md5值。

问题

我想要在检索到该压缩档案后进行提取。从阅读CMake 文档得知,当从远程检索时,似乎有一种使用自定义提取脚本的方式。

该文档没有展示自定义提取脚本的示例。它提到了通常使用file(DOWNLOAD)命令,但并未明确展示如何通过自定义提取脚本来复制其默认行为。

我希望实现并使用一个自定义提取脚本,以复制ExternalData的默认行为,这样我就可以添加一个file(ARCHIVE_EXTRACT)命令来提取该压缩档案。

(我还想知道是否将已下载文件的提取作为自定义提取脚本的职责,如果不是,那么在构建时下载该资源的情况下,最好将其放在哪里)。

1个回答

0

我还没有成功复制ExternalData的获取脚本的默认行为。但是,使用add_custom_command(),我已经将测试资产提取为POST_BUILD步骤。

追加到/tests/CMakeLists.txt

set(ASSETS_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/assets)
file(MAKE_DIRECTORY ${ASSETS_DIRECTORY})
set(ExternalData_BINARY_ROOT ${ASSETS_DIRECTORY})

add_custom_command(TARGET waveioTests
                   POST_BUILD
                   COMMAND 
                   dir & 
                   echo "${CMAKE_COMMAND} -E copy samples.tar ${ASSETS_DIRECTORY}/samples.tar" & 
                   ${CMAKE_COMMAND} -E copy samples.tar ${ASSETS_DIRECTORY}/samples.tar & 
                   ${CMAKE_COMMAND} -E chdir ${ASSETS_DIRECTORY} tar vxf samples.tar
                   COMMENT "Extracting test assets...")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接