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包管理器->程序包管理器设置”,进入设置界面,点击“程序包源”。

3.2 cmake进行使用

在cmakelists.txt 应用vcpkg

set(CMAKE_TOOLCHAIN_FILE "/home/pony/Downloads/vcpkg/scripts/buildsystems/vcpkg.cmake")
#或者
set(VCPKG_ROOT "${CMAKE_SOURCE_DIR}/../vcpkg/scripts/buildsystems/vcpkg.cmake" CACHE PATH "")
set(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT})

然后直接导入这个库find_package即可

3.3 命令行

cmake -S . -B build -DCAMKE_TOOLCHAIN_FILE=/home/pony/Downloads/vcpkg/scripts/buildsystems/vcpkg.cmake
cmake --build build
cd build
./sealdemo

3.4 bashrc方法

为避免每一次cmake的时候都要加上后缀-DCAMKE_TOOLCHAIN_FILE=address
我们可以通过以下方式解决

gedit .bashrc
export CMAKE_TOOCHAIN_FILE=/home/pony/Downloads/vcpkg/scripts/buildsystems/vcpkg.cmake

4. 导出已经安装的开源库

有的时候,一个项目组中有很多人,不需要每个人都参与编译。一个人编译好所有开源库后到处给别人即可。有的时候也是出于备份的目的,也会导出已经安装的开源库。导出可以执行export指令。例如,我要导出jsoncpp库,那么执行:

.\vcpkg.exe export jsoncpp --7zip

注意,导出时必须指定导出的包格式。vcpkg支持5种导出包格式,有:

参考链接

https://blog.csdn.net/qq_46000760/article/details/125005001

https://mp.weixin.qq.com

https://blog.csdn.net/cjmqas/article/details/79282847