CMake 检查下载文件的哈希值 (MD5 / SHA256)

Chr*_*ris 2 c++ hash download cmake sha256

add_custom_commandUtil.cmake脚本中使用 CMake 下载几个文件,这些文件稍后将在构建过程中使用。然而,这些文件可能会发生变化,我想添加一种方法来根据提供的值(在 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()
Run Code Online (Sandbox Code Playgroud)

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

PS:如果更容易的话,我也可以使用MD5over SHA256

小智 7

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

file(SHA256 ./file.dat CHECKSUM_VARIABLE)
Run Code Online (Sandbox Code Playgroud)

应该将哈希值放入 CHECKSUM_VARIABLE 中