太久没整windows 感觉差点不会了
boost下载地址
如果平台工具集是Visual Studio 2019 那么你最好选择最新的boost版本,会向下兼容,比如我下的boost_1_77_0
下载后解压,来到解压(我的路径比如说:D:\CodeMgr\boost_1_77_0
)目录,打开cmd
执行命令行
D:\CodeMgr\boost_1_77_0>bootstrap.bat
执行后会生成b2.exe
bjam.exe
可以看看b2
这个程序支持接收那些参数和可选项
D:\CodeMgr\boost_1_77_0>b2 --help
B2 4.6-git
Project-specific help:
Project has jamfile at Jamroot
Usage:
b2 [options] [properties] [install|stage]
Builds and installs Boost.
Targets and Related Options:
install Install headers and compiled library files to the
======= configured locations (below).
--prefix=<PREFIX> Install architecture independent files here.
Default: C:\Boost on Windows
Default: /usr/local on Unix, Linux, etc.
--exec-prefix=<EPREFIX> Install architecture dependent files here.
Default: <PREFIX>
--libdir=<LIBDIR> Install library files here.
Default: <EPREFIX>/lib
--includedir=<HDRDIR> Install header files here.
Default: <PREFIX>/include
--cmakedir=<CMAKEDIR> Install CMake configuration files here.
Default: <LIBDIR>/cmake
--no-cmake-config Do not install CMake configuration files.
stage Build and install only compiled library files to the
===== stage directory.
--stagedir=<STAGEDIR> Install library files here
Default: ./stage
Other Options:
--build-type=<type> Build the specified pre-defined set of variations of
the libraries. Note, that which variants get built
depends on what each library supports.
-- minimal -- (default) Builds a minimal set of
variants. On Windows, these are static
multithreaded libraries in debug and release
modes, using shared runtime. On Linux, these are
static and shared multithreaded libraries in
release mode.
-- complete -- Build all possible variations.
--build-dir=DIR Build in this location instead of building within
the distribution tree. Recommended!
--show-libraries Display the list of Boost libraries that require
build and installation steps, and then exit.
--layout=<layout> Determine whether to choose library names and header
locations such that multiple versions of Boost or
multiple compilers can be used on the same system.
-- versioned -- Names of boost binaries include
the Boost version number, name and version of
the compiler and encoded build properties. Boost
headers are installed in a subdirectory of
<HDRDIR> whose name contains the Boost version
number.
-- tagged -- Names of boost binaries include the
encoded build properties such as variant and
threading, but do not including compiler name
and version, or Boost version. This option is
useful if you build several variants of Boost,
using the same compiler.
-- system -- Binaries names do not include the
Boost version number or the name and version
number of the compiler. Boost headers are
installed directly into <HDRDIR>. This option is
intended for system integrators building
distribution packages.
The default value is 'versioned' on Windows, and
'system' on Unix.
--buildid=ID Add the specified ID to the name of built libraries.
The default is to not add anything.
--python-buildid=ID Add the specified ID to the name of built libraries
that depend on Python. The default is to not add
anything. This ID is added in addition to --buildid.
--help This message.
--with-<library> Build and install the specified <library>. If this
option is used, only libraries specified using this
option will be built.
--without-<library> Do not build, stage, or install the specified
<library>. By default, all libraries are built.
Properties:
toolset=toolset Indicate the toolset to build with.
variant=debug|release Select the build variant
link=static|shared Whether to build static or shared libraries
threading=single|multi Whether to build single or multithreaded binaries
runtime-link=static|shared
Whether to link to static or shared C and C++
runtime.
General command line usage:
b2 [options] [properties] [targets]
Options, properties and targets can be specified in any order.
Important Options:
* --clean Remove targets instead of building
* -a Rebuild everything
* -n Don't execute the commands, only print them
* -d+2 Show commands as they are executed
* -d0 Suppress all informational messages
* -q Stop at first error
* --reconfigure Rerun all configuration checks
* --debug-configuration Diagnose configuration
* --debug-building Report which targets are built with what properties
* --debug-generator Diagnose generator search/execution
Further Help:
The following options can be used to obtain additional documentation.
* --help-options Print more obscure command line options.
* --help-internal B2 implementation details.
* --help-doc-options Implementation details doc formatting.
...found 1 target...
其中对我来说比较重要的是:
Other Options:
--with-<library> Build and install the specified <library>. If this
option is used, only libraries specified using this
option will be built.
--without-<library> Do not build, stage, or install the specified
<library>. By default, all libraries are built.
Properties:
toolset=toolset Indicate the toolset to build with.
variant=debug|release Select the build variant
link=static|shared Whether to build static or shared libraries
threading=single|multi Whether to build single or multithreaded binaries
runtime-link=static|shared
Whether to link to static or shared C and C++
runtime.
其中参数toolset
可在bootstrap.bat
中查看
SET TOOLSET=msvc
IF "%1"=="gcc" SET TOOLSET=gcc
IF "%1"=="clang" SET TOOLSET=clang
IF "%1"=="vc71" SET TOOLSET=msvc : 7.1
IF "%1"=="vc8" SET TOOLSET=msvc : 8.0
IF "%1"=="vc9" SET TOOLSET=msvc : 9.0
IF "%1"=="vc10" SET TOOLSET=msvc : 10.0
IF "%1"=="vc11" SET TOOLSET=msvc : 11.0
IF "%1"=="vc12" SET TOOLSET=msvc : 12.0
IF "%1"=="vc14" SET TOOLSET=msvc : 14.0
IF "%1"=="vc141" SET TOOLSET=msvc : 14.1
IF "%1"=="vc142" SET TOOLSET=msvc : 14.2
无脑编译,默认debug和release版本都编,默认静态库,默认多线程
b2 toolset=msvc-14.2
选择性编译,如编译其中的文件系统库,静态库,MD版本
b2 toolset=msvc-14.2 --with-filesystem --with-system address-model=64 variant=release link=static runtime-link=shared
又或者我的orb-slam3的windows版本只需要64位的静态链接MT的序列化库,于是
b2 toolset=msvc-14.2 --with-serialization address-model=64 variant=release link=static runtime-link=static
使用:
在工程属性里添加你解压的地址就ok
编译链接运行以下代码
#include <iostream>
#include <boost/sort/sort.hpp>
#include <algorithm>
#include <vector>
int main()
{
std::vector<int> arr{};
while (arr.size() < 10)
arr.push_back(std::rand());
boost::sort::block_indirect_sort(std::begin(arr), std::end(arr));
std::for_each(std::begin(arr), std::end(arr), [](int& a) { std::cout << a << "\t"; });
return 0;
}