1. 下载
下载源码包:
https://boostorg.jfrog.io/artifactory/main/release/1.88.0/source/
使用git下载源码:(推荐)
git clone --recursive https://github.com/boostorg/boost.git
或者:(如果不适用–recursive选项)
git clone https://github.com/boostorg/boost.git
git submodule update --init
2. 安装编译依赖库
本地环境是Ubuntu 22.04,需要安装以下依赖库,部分影响boost相关功能的开启,部分影响编译过程。
本地环境编译AOSP源码,安装过相关依赖库,除了这里列出的可能还需要其他依赖库,可根据提示安装。
sudo apt install icu-devtools libicu-dev libbz2-dev liblzma-dev libzstd-dev python3-dev python2-dev -y
2.1 解压
解压后源码文件夹:
boost_1_82_0$ ls
boost boost.css bootstrap.sh index.html libs README.md tools
boost-build.jam boost.png doc INSTALL LICENSE_1_0.txt rst.css
boostcpp.jam bootstrap.bat index.htm Jamroot more status
2.2 执行bootstrap.sh脚本,生成b2编译工具
1)执行bootstrap.sh后,源码目录下增加b2和project-config.jam两个文件。
2)b2工具是用来编译和安装boost库。
(1)查看帮助:b2 --help
(2)编译:b2
(3)clean:b2 --clean
(4)安装:b2 install
(5)重新配置编译脚本:b2 --reconfigure
如果编译失败或者过程中发现缺少一些依赖库及boost相关模块,安装依赖库后,需要执行这个命令重新检测依赖并生成编译脚本。
$ ./bootstrap.sh
Building B2 engine..
###
###
### Using 'gcc' toolset.
###
###
g++ (Ubuntu 12.1.0-2ubuntu1~22.04) 12.1.0
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
###
###
> g++ -x c++ -std=c++11 -O2 -s -DNDEBUG builtins.cpp class.cpp command.cpp compile.cpp constants.cpp cwd.cpp debug.cpp debugger.cpp execcmd.cpp execnt.cpp execunix.cpp filesys.cpp filent.cpp fileunix.cpp frames.cpp function.cpp glob.cpp hash.cpp hcache.cpp hdrmacro.cpp headers.cpp jam_strings.cpp jam.cpp jamgram.cpp lists.cpp make.cpp make1.cpp md5.cpp mem.cpp modules.cpp native.cpp object.cpp option.cpp output.cpp parse.cpp pathnt.cpp pathsys.cpp pathunix.cpp regexp.cpp rules.cpp scan.cpp search.cpp startup.cpp subst.cpp sysinfo.cpp timestamp.cpp variable.cpp w32_getreg.cpp modules/order.cpp modules/path.cpp modules/property-set.cpp modules/regex.cpp modules/sequence.cpp modules/set.cpp -o b2
> tools/build/src/engine/b2
Detecting Python version... 2.7
Detecting Python root... /usr
Unicode/ICU support for Boost.Regex?... /usr
Generating B2 configuration in project-config.jam for gcc...
Bootstrapping is done. To build, run:
./b2
To generate header files, run:
./b2 headers
The configuration generated uses gcc to build by default. If that is
unintended either use the --with-toolset option or adjust configuration, by
editing 'project-config.jam'.
Further information:
- Command line help:
./b2 --help
- Getting started guide:
http://www.boost.org/more/getting_started/unix-variants.html
- B2 documentation:
http://www.boost.org/build/
2.3 编译和安装
1)执行b2命令编译源码,先检测编译依赖,然后根据依赖配置进行编译。
2)成功编译后,安装:b2 install。
默认安装路径为:/usr/local/include/boost 和 /usr/local/lib/
$ ./b2
Performing configuration checks
- default address-model : 64-bit [1]
- default architecture : x86 [1]
Building the Boost C++ Libraries.
- compiler supports SSE2 : yes [2]
- compiler supports SSE4.1 : yes [2]
- has std::atomic_ref : no [2]
- has -Wl,--no-undefined : yes [2]
- has statx : yes [2]
- has init_priority attribute : yes [2]
- has stat::st_blksize : yes [2]
- has stat::st_mtim : yes [2]
- has stat::st_mtimensec : no [2]
- has stat::st_mtimespec : no [2]
- has stat::st_birthtim : no [2]
- has stat::st_birthtimensec : no [2]
- has stat::st_birthtimespec : no [2]
- has fdopendir(O_NOFOLLOW) : yes [2]
- has POSIX *at APIs : yes [2]
- cxx11_auto_declarations : yes [2]
- cxx11_constexpr : yes [2]
- cxx11_defaulted_functions : yes [2]
- cxx11_final : yes [2]
- cxx11_hdr_mutex : yes [2]
- cxx11_hdr_tuple : yes [2]
- cxx11_lambdas : yes [2]
- cxx11_noexcept : yes [2]
- cxx11_nullptr : yes [2]
- cxx11_rvalue_references : yes [2]
- cxx11_template_aliases : yes [2]
- cxx11_thread_local : yes [2]
...(检测编译依赖)
Component configuration:
- atomic : building
- chrono : building
- container : building
- context : building
- contract : building
- coroutine : building
- date_time : building
- exception : building
- fiber : building
- filesystem : building
- graph : building
- graph_parallel : building
- headers : building
- iostreams : building
- json : building
- locale : building
- log : building
- math : building
- mpi : building
- nowide : building
- program_options : building
- python : building
- random : building
- regex : building
- serialization : building
- stacktrace : building
- system : building
- test : building
- thread : building
- timer : building
- type_erasure : building
- url : building
- wave : building
...patience...
...patience...
...found 18844 targets...
...updating 1767 targets...
... (编译源码)
common.copy /home/dev/github/boost/temp/boost_1_82_0/stage/lib/libboost_wave.a
...updated 1767 targets...
The Boost C++ Libraries were successfully built!
The following directory should be added to compiler include paths:
/home/dev/github/boost/temp/boost_1_82_0
The following directory should be added to linker library paths:
/home/dev/github/boost/temp/boost_1_82_0/stage/lib
2.4 测试程序
安装后,不用指定include和library path,编译时可自动搜索到。
以下测试程序可用clion或者命令行编译:
$ g++ -o main main.cpp
#include <string>
#include <iostream>
#include <boost/foreach.hpp>
int main()
{
std::string hello( "Hello, world!" );
BOOST_FOREACH( char ch, hello )
{
std::cout << ch;
}
return 0;
}
2.5 CMake依赖
在cmake脚本中使用find_package显示引用boost:
find_package(Boost 1.82 REQUIRED COMPONENTS filesystem regex PATHS C:/Boost)
find_package(Boost 1.82 REQUIRED COMPONENTS ALL)
find_package(Boost 1.82 REQUIRED ALL)