0. 简介
相较于python而言,C++因为其复杂的环境安装一直受到很多人的诟病,比如说一个pcl的安装就需要有很多操作步骤。译过程仍然复杂和多样化。当了解了这些还不够,我们还需要考虑预先编译出哪种类型的开源库程序。比如:Debug还是Release、动态库还是静态库、MD还是MT、32位还是64位。常见的编译方式就有下面四种:
为了解决这样的问题,微软C++ 团队开发了适用于C 和C++ 库的跨平台开源软件包管理器,它大大简化了Windows、Linux 和macOS 上第三方库相关的下载和配置操作。如果项目要使用第三方库,现在我建议各位读者通过 vcpkg来安装它们。vcpkg可以单独使用,也可以在vscode中使用。
1. vcpkg安装
依次在终端中输入:
git clone https://github.com/microsoft/vcpkg
cd vcpkg/
./bootstrap-vcpkg.sh
./vcpkg --version #(windows)是./vcpkg.exe --version
因为vcpkg在linux系统上默认安装库文件的release和debug版本,并且调用安装库时会默认调用debug版本(不知道具体原因),会给代码测试带来很大困扰,因此在正式使用vcpkg之前我们需要对vcpkg\triplets文件夹下的x64-linux.cmake文件进行修改。
手动打开vcpkg\triplets\vcpkg\triplets文本进行编辑,在最后一行输入
set(VCPKG_BUILD_TYPE release)
2. vcpkg使用
vcpkg还可以通过下面的方法找到能够安装的库
.\vcpkg search
# .\vcpkg help triplet
常见的库基本都有,Ogre、Osg、OpenCV、PCL、Eigen、Ceres、g2o等等,这些库的安装直接敲命令,内部所有依赖关系都被人维护并测试通过
然后就可以通过下面的指令完成安装,vcpkg默认把开源库编译成x86的Windows版本的库
.\vcpkg install 库名字
来完成库的安装,此外安装时候需要指定64/32,static/dynamic,还有运行时是MT/Md光这几个组合就有8种
.\vcpkg install 库名字:架构-平台-是否静态库
# .\vcpkg install PCL:x64-windows-static
如果移除一个已经安装的开源库,那么执行remove指令即可。比如我们要移除PCL,那么执行命令:
.\vcpkg remove 库名字
# .\vcpkg remove PCL
# .\vcpkg remove --outdated # 如果想要一键移除“过时”的包
如果你想使用VS,打开任何新建工程都有环境的话,可以使用
./vcpkg integrate install
此时我们可以看到出现-DCMAKE_TOOLCHAIN_FILE=address(这条指令会在之后的cmake指令中用到)
3. Vcpkg环境集成
上面我们已经安装了一些第三方库,那如何使用呢?常规情况下,我们需要设置include目录、lib目录等,会有很多工作量。Vcpkg提供了一套机制,可以全自动的适配目录,而开发者不需要关心已安装的库的目录在哪里,也不需要设置。这是Vcpkg的一大优势。
3.1 VS环境导入
如果你想使用VS,打开任何新建工程都有环境的话vcpkg integrate install只是想让某一个project有环境的话vcpkg integrate project然后在*\vcpkg\scripts\buildsystems目录下会有.nupkg文件,借助VS的nuget管理器导入该配置文件即可。打开Visual Studio,点击菜单“工具->NuGet包管理器->程序包管理器设置”,进入设置界面,点击“程序包源”。