CMake ExternalData自定义获取脚本



简介

我有一个项目;测试";目标,该目标要求在运行时从远程源提取一些资产以显示在构建树中。目前,我已经使用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文档,似乎有一种方法可以在从远程检索时使用自定义获取脚本。

文档中没有显示自定义获取脚本的示例。它提到文件(DOWNLOAD(命令是正常使用的,但它没有明确显示如何通过自定义获取脚本复制其默认行为

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

(我还想知道提取下载的文件是否应该是自定义提取脚本的责任,如果不应该,考虑到资产只在构建时下载,最好放在哪里(。

我没有成功复制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...")

最新更新