【Boost】Windows 下个人在配置 Boost 踩到的坑以及解决方案
要编译的 Boost 版本:1.82.0
假设 Boost 的根目录为
${boost_root}$
如果不想编译可以使用博主编译后的Boost:https://pan.baidu.com/s/1s2fLoEgJX3540rk_WIkNOQ?pwd=yyds
一、关于 VC14.2 编译
-
https://www.boost.org/ 下载 boost 源码 boost_1_82_0.zip解压。
-
使用 x86_x64 Cross Tools Command Prompt for VS 2019 切换操作目录至 boost 下 (避免PC中多个VS版本的影响)
-
基于 VS2019 的 CMD 运行
bootstrap.bat
会自动使用 VC14.2 生成 b2.exe (新版本不会生成 bjam.exe)个人建议:首先去配置一下
cl
命令的环境变量,避免提示以下问题:'cl' 不是内部或外部命令,也不是可运行的程序。
解决这个问题的方法是将
cl
命令的位置添加到系统的环境变量中,我的安装路径在 D 盘中,则需要将以下内容添加到Path
环境变量中:D:\Soft\Microsoft\VS2019\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64
环境变量修改之后必须重启才能生效。
添加完以上环境变量之后,再次运行
.\bootstrap.bat
,如果出现以下错误:fatal error C1034: ctype.h: 不包括路径集。
则说明是 Windows 环境变量没有配置或没配置好。此时我们需要在系统的环境变量里面新建两个环境变量,它们的变量名和变量值分别为:
# 仅供参考 # 第一个环境变量 变量名:INCLUDE 变量值:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\include C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\shared C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\ucrt C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\um C:\Program Files (x86)\Windows Kits\10\Include\10.0.18362.0\winrt # 第二个环境变量 变量名:LIB 变量值:C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.26.28801\lib\x64 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\ucrt\x64 C:\Program Files (x86)\Windows Kits\10\Lib\10.0.18362.0\um\x64
添加完之后,重启,使环境变量生效。
然后再次运行
.\bootstrap.bat
,正常情况下应该输出 b2.exe 的信息:然后接下来要运行
.\b2
命令来进行编译,编译命令如下:b2 install --prefix=D:\Soft\Language\Boost-vc142 --build-type=complete --toolset=msvc-14.2 threading=multi address-model=32 address-model=64 debug release
关于上述命令中各参数的详细解释,请自行查阅。
但是执行上述命令之后可能会报如下错误:
error: msvc initialization: parameter 'version' inconsistent error: no value was specified in earlier initialization error: an explicit value is specified now
解决方法是修改
${boost_root}
目录下的project-config.jam
文件,如果用的是 VS2019,则可以将里面的内容修改成:import option ; using msvc : 14.2 : "D:\Soft\Microsoft\VS2019\VC\Tools\MSVC\14.28.29910\bin\Hostx64\x64\cl.exe"; option.set keep-going : false ;
然后再次运行
.\b2
命令,如果没有什么什么问题应该就可以正常编译了。编译之后,会生成一个
include
文件夹和一个lib
文件夹。至此,编译过程结束。
二、CMake 配置过程
个人建议,使用之前可以先配置一下 Boost include 和 lib 的环境变量
BOOST_INCLUDEDIR:D:\Soft\Language\Boost-vc142\include\boost-1_82
BOOST_LIBRARYDIR:D:\Soft\Language\Boost-vc142\lib
编译用的CMakeLists.txt,有两种写法,这里推荐第一种
link_directories一定要放在add_executable前面,
target_link_libraries一定要放在add_executable后面
不然会发生 cmake 无法打开 libboost_xx_xx-vc142-mt-gd-x32-1_xx.lib
等类似问题
cmake_minimum_required(VERSION 3.1...3.20)
# 若在 Clion 中的工具链使用 MVSC 报错则注释此行
add_compile_options("/std:c++17")
project(Boost)
# 避免 cmake 无法找到 Boost
set (BOOST_ROOT "D:/Soft/Language/Boost-vc142")
#Boost
set(Boost_DEBUG ON)
set(Boost_USE_STATIC_LIBS ON)
find_package(Boost REQUIRED COMPONENTS filesystem)
MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}.")
MESSAGE( STATUS "Boost_LIBRARY_DIRS = ${Boost_LIBRARY_DIRS}.")
MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}.")
MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}.")
# cmake 注意事项
link_directories(${BOOST_ROOT}/lib)
include_directories(${Boost_INCLUDE_DIRS})
FILE(GLOB CPP_FILE0 ${PROJECT_SOURCE_DIR}/Boost-test/*.cpp)
add_executable(Boost_test ${CPP_FILE0})
target_link_libraries(Boost_test ${Boost_LIBRARIES})
第二种:
cmake_minimum_required(VERSION 3.1...3.20)
# 若在 Clion 中的工具链使用 MVSC 报错则注释此行
add_compile_options("/std:c++17")
project(Boost)
#Boost
set(Boost_DEBUG ON)
find_package(Boost REQUIRED)
MESSAGE( STATUS "Boost_INCLUDE_DIRS = ${Boost_INCLUDE_DIRS}.")
MESSAGE( STATUS "Boost_LIBRARY_DIRS = ${Boost_LIBRARY_DIRS}.")
MESSAGE( STATUS "Boost_LIBRARIES = ${Boost_LIBRARIES}.")
MESSAGE( STATUS "Boost_LIB_VERSION = ${Boost_LIB_VERSION}.")
# cmake 注意事项
link_directories(${BOOST_ROOT}/lib)
include_directories(${Boost_INCLUDE_DIRS})
FILE(GLOB CPP_FILE0 ${PROJECT_SOURCE_DIR}/Boost-test/*.cpp)
add_executable(Boost_test ${CPP_FILE0})
target_link_libraries(Boost_test ${Boost_LIBRARY_DIRS}/*.lib)
关于 VS2019 中使用 Boost
简单的在配置属性的 VC 中添加 include 和 lib 的库文件位置即可