gpt4 book ai didi

cmake - 如何使用 CMake 下载任意文件作为自定义目标的一部分?

转载 作者:行者123 更新时间:2023-12-04 17:57:32 28 4
gpt4 key购买 nike

CMake,通过其 ExternalProject ,可以在构建期间轻松下载大量文件,保持存储库清洁。例如,我可以像这样下载和解压 Eigen:

include(ExternalProject)

ExternalProject_Add(
eigen
URL http://bitbucket.org/eigen/eigen/get/3.2.8.tar.bz2
URL_HASH SHA512=53c27ba530c985dfef52188e03273eeef33abbc67e3f150cacd3371c8b9ddbd399228730595821c4c56c061d109cf509266c1dab2b8a7c730902cbd6fb18c100
INSTALL_COMMAND ""
)

我希望能够对任意文件执行相同的操作,就我而言,为了演示目的下载其他数据。 CMake 确实提供 file(DOWNLOAD...) 为此,它运行良好,例如:
file(DOWNLOAD
http://graphics.stanford.edu/pub/3Dscanrep/bunny.tar.gz
${CMAKE_BINARY_DIR}/demo/bunny.tar.gz
SHA512=59e7b43db838dbe6f02fda5e844d18e190d32d2ca1a83dc9f6b1aaed43e0340fc1e8ecabed6fffdac9f85bd34e7e93b5d8a17283d59ea3c14977a0372785d2bd
SHOW_PROGRESS
)
add_custom_target(demo tar -xzf ${CMAKE_BINARY_DIR}/demo/bunny.tar.gz -C ${CMAKE_BINARY_DIR}/demo)

这将下载一个文件,验证它并--使用 make demo ——提取出来。但是,每次运行 CMake 时都会下载存档,而不仅仅是一次,并且它不依赖于目标 demo被调用。

这可以通过 CMake 以某种方式实现吗?我不认为 ExternalData会有所帮助,因为我真的只想从互联网上下载任意文件。

最佳答案

However, the archive is downloaded every time CMake is run, not just once, and it does not depend on the target demo being invoked.



难怪为什么。您没有添加目标 eigen或任何作为 demo 的依赖项.

所以,像下面这样的应该工作:
ExternalProject_Add(
bunny
PREFIX "demo"
URL http://graphics.stanford.edu/pub/3Dscanrep/bunny.tar.gz
URL_HASH SHA512=59e7b43db838dbe6f02fda5e844d18e190d32d2ca1a83dc9f6b1aaed43e0340fc1e8ecabed6fffdac9f85bd34e7e93b5d8a17283d59ea3c14977a0372785d2bd
CONFIGURE_COMMAND ""
BUILD_COMMAND ""
INSTALL_COMMAND ""
)

add_custom_target(demo tar -xzf ${CMAKE_BINARY_DIR}/demo/src/bunny.tar.gz -C ${CMAKE_BINARY_DIR}/demo)

add_dependencies(demo bunny)

注意:
目标产生于 ExternalProject_Add默认情况下提取文件。并且您正在下载名为 bunny.tar.gz 的文件其中包含另一个 src/bunny.tar.gz捆绑在里面。

关于cmake - 如何使用 CMake 下载任意文件作为自定义目标的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39022188/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com