c++ - 下载文件的 CMake 检查哈希 (MD5/SHA256)

标签 c++ hash download cmake sha256

我在 Util.cmake 脚本中使用 CMake add_custom_command 下载几个文件,这些文件稍后将在构建过程中使用。然而,这些文件可能会更改,我想添加一种方法来根据提供的值(在 CMake 中)检查本地文件的哈希值,以确定是否需要重新下载文件。

目前,一旦文件下载完成,CMake不会考虑重新下载,因为该文件已经存在于本地。

将来,我想提供该文件的 MD5/SHA256 校验和,并确保本地文件是正确的。

这是我正在尝试做的(这只是一个概念示例):

add_custom_command( OUTPUT ./file.dat
    COMMAND wget ${FILE_PATH}
)
if (opt_HASH)
    add_custom_command(OUTPUT ${local_HASH}
        COMMAND local_HASH=$(sha256sum ./file.dat)
        DEPENDS ./file.dat
    )
    if (NOT ${opt_HASH} STREQUAL ${local_HASH})
        # throw ERROR
    endif()
endif()

如您所见,我现在只想检测不匹配,甚至不想自动下载更改后的文件。 opt_HASH 显然是通过 CMake 提供的,但重要的是此调用需要依赖于已经下载的文件,我似乎可以通过更简单的调用来做到这一点 文件()

PS:如果更简单一些,我还可以使用 MD5 而不是 SHA256

最佳答案

cmakes FILE 命令支持哈希: https://cmake.org/cmake/help/v3.8/command/file.html

file(SHA256 ./file.dat CHECKSUM_VARIABLE)

应该将哈希放入 CHECKSUM_VARIABLE

关于c++ - 下载文件的 CMake 检查哈希 (MD5/SHA256),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667988/

相关文章:

c++ - 在堆栈上创建对象

c++ - 如何将此结构传递给可用函数?

ruby-on-rails - 在哈希中获取空月份

javascript - 不使用 JavaScript 下载文件

java - Jersey (网络服务): the advantages of StreamingOutput and the best way for create downloading API

c++ - 无法在 GCC 中使用数组

c++ - 尝试使用 glDrawArraysInstanced() 时 OpenGL 崩溃

c++ - 如何找到哈希表的大小?

java - 使用 Java 进行云中的重复数据删除

javascript - 为什么 express 的 res.download() 方法会导致 "request aborted"错误?