[英]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.