繁体   English   中英

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

[英]How to download boost using their SHA256 Hash through CMake?

我正在尝试将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 ,它下载并编译就很好。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM