Bootstrap

boost下载和编译初步指南(windows10+VScode)

boost库介绍

学boost库之前,应该先对STL(Standard Template Library)标准模板库已经有所了解,boost是对STL的一个延续和补充,STL封装了很多非常好用的模板,如vector、string、vector等。这些都是写复杂一点的程序逻辑必备的模板。而boost库,在STL的基础上增加了很多更强大的功能。至于多强大,大家的评论基本是包罗万象,有什么常见的数据结构或常见的算法,都可以来boost库来找一找相关的。
ps:STL库是在C++编译器自带的,无论你是g++还是msvc,但boost是需要下载引用到工程里的。

boost下载

从boost官网www.boost.org,download → \rightarrow Old Boost Releases → \rightarrow version history下载boost_1_76_0版本的boost压缩包。
在这里插入图片描述
解压后,文件目录如下。
在这里插入图片描述
如何在windows使用boost库,先参考Getting Started on Windows官方教程,如官网所说,boost大多数库是可以通过直接包含库路径编译的,不需要用b2(boost.build)工具来单独编译。什么库需要,什么不需要参考getting started教程。

The first thing many people want to know is, “how do I build Boost?” The good news is that often, there’s nothing to build.

配置vscode

这里我将boost文件放在了E:\ThirdCPlusLib目录下。
新建一个空白文件夹,用vscode打开,新建一个cpp文件,将getting started教里测试lambda的代码赋值粘贴上去。

#include <boost/lambda/lambda.hpp>
#include <iostream>
#include <iterator>
#include <algorithm>

int main()
{
    using namespace boost::lambda;
    typedef std::istream_iterator<int> in;

    std::for_each(
        in(std::cin), in(), std::cout << (_1 * 3) << " " );
}

然后我们配置task.json文件,成功编译的重点在于arg参数的
-I "E:\\ThirdCPlusLib\\boost_1_76_0"(-I是大写)。
这里的-I其实就是g++ -I 路径,意思是编译程序时按照-I指定的路径去搜索头文件。

ps:要区分大写的-I和小写的-l,大写的-I可以理解为include,后面跟的是路径。小写的-l可以理解为library,后面跟的是库的名字,和-L(路径)配合使用。

这里我是修改了default的g++ build task,除了加了-I参数 ,还修改了label,和detail参数,只是为了避免我用错了task,没有功能上的作用。
vscode上的界面操作:Terminal → \rightarrow Configure Default Build Task…

{
	"version": "2.0.0",
	"tasks": [
		{
			"type": "cppbuild",
			"label": "C/C++: g++.exe 生成活动文件with boost lib",
			"command": "D:/mingw64/bin/g++.exe",
			"args": [
				"-g",
				"${file}",
				"-o",
				"${fileDirname}\\${fileBasenameNoExtension}.exe",
				"-I",
                "E:\\ThirdCPlusLib\\boost_1_76_0"
			],
			"options": {
				"cwd": "D:/mingw64/bin"
			},
			"problemMatcher": [
				"$gcc"
			],
			"group": {
				"kind": "build",
				"isDefault": true
			},
			"detail": "编译器: D:/mingw64/bin/g++.exe with boost lib"
		}
	]
}

修改了编译的参数,我们需要修改一下c_cpp_properties.json文件,ctrl+shift+p,找到C/C++:Edit Configurations(UI)或者C/C++:Edit Configurations(JSON)内容效果是一样的,只不过一个是UI界面,一个是json文件。
修改这个文件其实不影响编译效果,影响的是vscode IntelliSense,正确设置,方便我们编写代码和调试。

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "E:\\ThirdCPlusLib\\boost_1_76_0"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.18362.0",
            "compilerPath": "D:/mingw64/bin/g++.exe",
            "cStandard": "c99",
            "cppStandard": "c++11",
            "intelliSenseMode": "windows-gcc-x64"
        }
    ],
    "version": 4
}

主要关注下面这几个参数:
includePath:添加上我们的boost库路径,这样再Include的时候,编辑器不会报错
compilePath:确定编译器的路径,用哪个编译器选哪个,不然在追踪头文件时,会发现一些标准库文件的路径的很奇怪。
cStandard和cppStandard: C和C++的标准,根据自己项目需求选。
intelliSenseMode:根据编译器和系统位数选择。

测试

设置好以后,打开刚刚编辑的cpp文件,Terminal → \rightarrow Run Task…,找到我们编辑过的Task,编译成功后会在目录下生成一个和cpp文件同名的exe文件。
vscode中打开一个powershell终端,Terminal → \rightarrow New Terminal,运行exe文件。
如果如下生成结果,及boost配置成功。
在这里插入图片描述

;