如何通过 CMake 使用他们的 SHA256 哈希下载提升?

How to download boost using their SHA256 Hash through CMake?

本文关键字:下载 哈希 SHA256 他们的 何通过 CMake      更新时间:2023-10-16

我正在尝试将 boost 作为外部项目添加到我的项目中。但是,当我添加 URL 来提升版本并使用他们的哈希值时,即使我直接从他们的网站复制了它,我也会出现哈希不匹配。此处链接以获取最新版本。这是我的boostExternal.cmake文件:

#---------------------------------------------------------------------------
# Get and build boost
SET_PROPERTY(DIRECTORY PROPERTY "EP_BASE" ${ep_base})
SET(boost_GIT_TAG "origin/master")
set( Boost_Bootstrap_Command )
if( UNIX )
  set( Boost_url "https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz")
  set( Boost_Hash "SHA256=882b48708d211a5f48e60b0124cf5863c1534cd544ecd0664bb534a4b5d506e9")
  set( Boost_Bootstrap_Command ./bootstrap.sh )
  set( Boost_b2_Command ./b2 )
elseif( WIN32 )
    set( Boost_url "https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.zip")
    set( Boost_Hash "SHA256=48f379b2e90dd1084429aae87d6bdbde9670139fa7569ee856c8c86dd366039d")
    set( Boost_Bootstrap_Command bootstrap.bat )
    set( Boost_b2_Command b2.exe )
endif()
  ExternalProject_Add(Boost_external_Download
    URL ${Boost_url}
    URL_HASH ${Boost_Hash}
    BUILD_IN_SOURCE 1
    UPDATE_COMMAND ""
    PATCH_COMMAND ""
    CONFIGURE_COMMAND ${Boost_Bootstrap_Command}
    BUILD_COMMAND  ${Boost_b2_Command} install
      --with-system
      --with-chrono
      --with-filesystem
      --disable-icu
      --prefix=${CMAKE_BINARY_DIR}/Boost
      --threading=single,multi
      --link=shared
      --variant=release
      -j8
    INSTALL_COMMAND ""
    INSTALL_DIR ""
  )
#CACHE PATH "" seems to write the path to a file that I can set 
#library paths to. 
set(Boost_LIBRARY_DIR ${CMAKE_BINARY_DIR}/Boost/lib CACHE PATH "")
if(WIN32)
  set(Boost_INCLUDE_DIR ${CMAKE_BINARY_DIR}/Boost/include/boost-1_70 CACHE PATH "")
  set(BOOST_ROOT ${CMAKE_BINARY_DIR}/Boost)
else()
  set(Boost_INCLUDE_DIR ${CMAKE_BINARY_DIR}/Boost/include CACHE PATH "")
endif()
ExternalProject_Get_Property(Boost_external_Download BINARY_DIR)
SET(Boost_DIR ${BINARY_DIR} CACHE PATH "")
add_library(Boost_external SHARED IMPORTED)
message(STATUS "Boost_DIR: ${Boost_DIR}")

但是当我调用这个cmake文件时,我收到错误:

-- verifying file...
       file='/home/sailanarmo/Documents/build/Superbuild/Download/Boost_external_Download/boost_1_70_0.tar.gz'
-- SHA256 hash of
    /home/sailanarmo/Documents/build/Superbuild/Download/Boost_external_Download/boost_1_70_0.tar.gz
  does not match expected value
    expected: '882b48708d211a5f48e60b0124cf5863c1534cd544ecd0664bb534a4b5d506e9'
      actual: 'e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855'
-- File already exists but hash mismatch. Removing...

这没有意义,因为我在 .cmake 文件中输入了正确的哈希和正确的协议。但是,实际似乎与我粘贴的内容不匹配。我做错了什么吗?

我找到了原因。

构建 CMake 时,必须配置 SSL 支持,否则 CMake 将不允许使用 https 协议。为此,您需要将 CMake 配置为如下:

./bootstrap --system-curl
make
sudo make install

这将使用Linux的系统curl,它应该配置SSL支持。但是,而不是手动重新安装CMake。我决定把s放在https.这意味着我将https://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz更改为http://dl.bintray.com/boostorg/release/1.70.0/source/boost_1_70_0.tar.gz,它下载和编译得很好。