Visual Studio编译Boost

Visual Studio编译Boost

    • 前期准备
      • 下载
      • 解压
    • 配置环境
    • 编译步骤
      • 引导
      • 编译
      • 命令参数介绍
    • 测试Boost库
      • 创建项目
      • 导入库
      • 测试代码

前期准备

下载

进入Boost官网,点击Boost的最新版本,进入选择下载页面,若使用Windows操作系统,下载Boost源码的7z压缩包。
Boost官网:https://www.boost.org

解压

Boost源码压缩包下载之后,解压至指定位置。我把Boost源码解压至E:\Download\Boost,而Boost的根目录为E:\Download\Boost\boost_1_68_0

配置环境

Visual Studio 2017更加注重跨平台性,安装文件较多,其中VC有三个版本,分别是arm、HostX64、HostX86,此处使用HostX64的编译器cl.exe编译Boost库,安装VS时,默认cl.exe的路径并未添加至环境变量,需要自行配置。

以管理员身份打开命令提示符窗口,在窗口中输入”cl”并按Enter键回车,若窗口展现如下图所示,说明cl.exe的路径已经添加至环境变量中。
Visual Studio编译Boost_第1张图片
以管理员身份打开命令提示符窗口的方法见文章——Windows以管理员身份运行命令提示符
Windows菜单的PowerShell改回命令提示符的操作方法见文章——Windows菜单的PowerShell改回命令提示符

如果给予提示 ‘cl’ 不是内部或外部命令,也不是可运行的程序或批处理文件。
说明cl.exe的路径未添加至环境变量中,需要手动配置。右击桌面计算机或者我的电脑,弹出右键菜单,选择属性,出现系统窗口,点击高级系统设置,弹出系统属性窗口,点开高级选项卡,点击环境变量按钮,弹出环境变量窗口,在系统变量表中寻找并双击Path,对其值进行编辑,在值最后添加编译器cl.exe的路径,各路径之间以分号隔开。

对Path变量值进行长文本形式的编辑,且原来的值保持不变,否则会丢失系统环境路径。

我的编译器cl.exe位于E:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\x64,路径的前段E:\Program Files (x86),根据VS安装位置决定,后段相似,路径之中的2017和14.10.25017根据VS版本决定 。

编译步骤

引导

按Windows键打开开始菜单,寻找Developer Command Prompt for VS 2017或者VS 2017的开发人员命令提示符,其他版本VS的命令工具名称类似,右击弹出右键菜单,选择以管理员身份运行,出现如图界面:
Visual Studio编译Boost_第2张图片
切换至Boost根目录:

cd E:\Download\Boost\boost_1_68_0

执行以下命令:

bootstrap.bat msvc

生成b2.exe、bjam.exe、project-config.jam文件,b2.exe和bjam.exe都是构建工具,用于构建Boost库,而project-config.jam是配置文件。如下图所示:
Visual Studio编译Boost_第3张图片

编译

许多资料说编辑project-config.jam文件,结果编译提示出错,如以下配置所示:

import option ; 
 
using msvc : 14.1 : "E:\Program Files (x86)\Microsoft Visual 	Studio\2017\Community\VC\Tools\MSVC\14.10.25017\bin\HostX64\cl.exe" ; 
 
option.set keep-going : false ; 

而不修改此文件,保持不变,成功编译。

执行以下命令编译Boost,编译项较多,编译时间由PC配置和系统状态决定。

b2.exe install --toolset=msvc-14.1 --prefix="E:\Download\Boost\boost_1_68_0" --build-type=complete threading=multi

不同VS版本对应MSVC版本如下表所示:

VS版本 VS2003 VS2005 VS2008 VS2010 VS2012 VS2013 VS2015 VS2017 VS2019
MSVC版本 7.0 8.0 9.0 10.0 11.0 12.0 14.0 15.0 16.0

编译完成之后,在Boost的根目录下可以看见bin.v2、include和lib三个文件夹,可以把编译产生的临时文件夹bin.v2删除。如下图所示:
Visual Studio编译Boost_第4张图片

命令参数介绍

b2命令参数形式:
b2 [options] [properties] [targets]

类型 可选项 说明
targets install 复制include头文件夹和生成lib库文件夹。
targets stage 只生成lib库文件夹。由于include文件夹复制于Boost根目录的boost文件夹,因此可以直接使用boost文件夹。
options –prefix 以install方式编译时,指定与体系结构无关的文件存放目录。默认为C:\Boost。
options –exec-prefix 以install方式编译时,指定依赖于体系结构的文件存放目录。默认与–prefix相同。
options –libdir 以install方式编译时,指定库文件存放位置。默认为–prefix指定目录的lib文件夹。
options –includedir 以install方式编译时,指定头文件存放位置。默认为–prefix指定目录的include文件夹。
options –stagedir 以stage方式编译时,指定输出库目录。默认在Boost根目录生成stage文件夹,存放lib文件。
options –build-type 编译方式,默认最小编译,可以指定全编译。可选minimal/complete。
options –build-dir 编译产生的中间文件存放位置。默认于Boost根目录生成bin.v2文件夹,存放中间文件,在Boost编译完成之后可以删除。
options –show-libraries 展示需要构建和安装的Boost库列表。
options –help 介绍b2的使用方法和参数含义。
options –with 只编译指定库。
options –without 不编译指定库。
properties toolset 指定编译器版本,若不指定则自动搜索本地可用编译器。
properties variant 指定编译版本。可选debug/release,默认编译二者。
properties link 指定生成库为静态库或者动态库。可选static/shared。
properties runtime-link 指定运行时静态链接或者动态链接其他库。可选static/shared,默认编译二者。
properties threading 指定生成库为单线程或者多线程。可选single/multi,默认是multi。

测试Boost库

创建项目

打开Visual Studio 2017,在菜单栏内依次点击文件–>新建–>项目,如下图所示:
Visual Studio编译Boost_第5张图片
弹出新建项目窗口,左边依次展开已安装–>模板–>Visual C++,再选中Visual C++,右边选择空项目,在下边填写项目名称,选择性地修改项目存放的位置,最后点击确定,完成新建项目。如下图所示:
Visual Studio编译Boost_第6张图片

创建一文件夹,专门用来存放项目,便于统一管理项目。
项目一般不放在系统盘,避免系统崩溃时,找回项目遇到问题。

创建项目之后,在解决方案资源管理器窗口内,显示有项目组织结构,如下图所示:
Visual Studio编译Boost_第7张图片
右击项目的源文件文件夹,弹出右键菜单,依次选择添加–>新建项,详情见下图:
Visual Studio编译Boost_第8张图片
弹出添加新项窗口,如下图所示:
Visual Studio编译Boost_第9张图片
点开左上角的已安装,选中Visual C++,在右边窗格选择C++文件(.cpp),在下边填写源文件名称位置默认,之后点击添加
完成以上操作后,出现新建源文件的编辑窗口,如下图所示:
Visual Studio编译Boost_第10张图片
右击解决方案资源管理器窗口内项目,弹出右键菜单,选择属性,如下图所示:
Visual Studio编译Boost_第11张图片
弹出属性页窗口,左边依次展开配置属性–>C/C++,选中常规,查看右边SDL检查输入框内的设置,如下图所示:
Visual Studio编译Boost_第12张图片
若未设置或者设置为否(sdl-),直接点击取消
如果原来设置为是(/sdl),单击输入框,点击输入框右边向下的尖角,出现两个选项,选择否(/sdl-),并且点击确定。如下图所示:
Visual Studio编译Boost_第13张图片

导入库

打开项目属性页窗口,左边依次展开属性配置–>C/C++,选中常规,在右边附加包含目录的输入框中,填入Boost库编译之后include文件夹所在路径。由于include文件夹中还有带boost版本命名的文件夹,因此填入的路径再接上那带boost版本的文件夹名。我的附加包含目录为E:\Download\Boost\boost_1_68_0\include\boost-1_68,如下图所示:
Visual Studio编译Boost_第14张图片

由于Boost的头文件和库文件多而且大,为避免复制耗时和项目臃肿,因此以绝对路径方式配置,待到打包应用时再拷贝需要的库文件,并以相对路径方式配置。

左边展开链接器,选中常规,在右边附加库目录的输入框中,填入Boost库编译之后生成的lib文件夹所在路径。我的附加库目录为E:\Download\Boost\boost_1_68_0\lib,如下图所示:
Visual Studio编译Boost_第15张图片
最后点击确定,完成Visual Studio 2017以绝对路径方式引用Boost库的步骤。

测试代码

在创建的源文件中编写以下代码,测试Boost库是否导入成功。

#include 
#include 

#include 
#include 

using namespace boost::assign;

#define reverse_foreach BOOST_REVERSE_FOREACH

int main()
{
	// 类似于C++标准的初始化列表
	std::list<int> iList = list_of(1)(2)(3);	
	iList += 4, 5, 6;
	push_back(iList)(7)(8)(9);
	push_front(iList)(0);
	reverse_foreach(auto& i, iList)
		std::cout << i << ' ';
	return 0;
}

编译以上代码,运行程序,结果如下图所示:
运行结果

你可能感兴趣的:(C/C++,Microsoft,Visual,Studio)