下载文件的 CMake 检查哈希 (MD5 / SHA256)
CMake check hash (MD5 / SHA256) for downloaded file
我正在使用 CMake add_custom_command
在 Util.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()
如您所见,我现在只想检测不匹配,甚至不想自动下载更改后的文件。 opt_HASH
显然是通过 CMake 提供的,但重要的是这个调用需要依赖于已经下载的文件,我似乎可以通过更简单的 FILE()
调用来做到这一点。
PS:如果更简单的话,我也可以使用 MD5
而不是 SHA256
。
add_custom_target 的用法可能是一种解决方案。默认情况下,它将始终执行。以下内容适用于 linux:
add_custom_target(UpdateExternalFiles
COMMAND "sha256sum -c file.dat.checksum ./file.dat || wget ${FILE_PATH}"
COMMAND "sha256sum ./file.dat >> file.dat.checksum"
)
第一行验证校验和并根据差异加载文件。第二行更新校验和。
注意:此片段假定 file.dat.checksum 将使用第二个命令创建。
cmakes FILE 命令支持哈希:
https://cmake.org/cmake/help/v3.8/command/file.html
file(SHA256 ./file.dat CHECKSUM_VARIABLE)
应该将散列放入CHECKSUM_VARIABLE
我正在使用 CMake add_custom_command
在 Util.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()
如您所见,我现在只想检测不匹配,甚至不想自动下载更改后的文件。 opt_HASH
显然是通过 CMake 提供的,但重要的是这个调用需要依赖于已经下载的文件,我似乎可以通过更简单的 FILE()
调用来做到这一点。
PS:如果更简单的话,我也可以使用 MD5
而不是 SHA256
。
add_custom_target 的用法可能是一种解决方案。默认情况下,它将始终执行。以下内容适用于 linux:
add_custom_target(UpdateExternalFiles
COMMAND "sha256sum -c file.dat.checksum ./file.dat || wget ${FILE_PATH}"
COMMAND "sha256sum ./file.dat >> file.dat.checksum"
)
第一行验证校验和并根据差异加载文件。第二行更新校验和。
注意:此片段假定 file.dat.checksum 将使用第二个命令创建。
cmakes FILE 命令支持哈希: https://cmake.org/cmake/help/v3.8/command/file.html
file(SHA256 ./file.dat CHECKSUM_VARIABLE)
应该将散列放入CHECKSUM_VARIABLE