vcpkg是微软 C++ 团队开发的适用于 C 和 C++ 库的跨平台开源软件包管理器,它大大简化了 Windows、Linux 和 macOS 上第三方库相关的下载和配置操作,目前已有超过1600个第三方库可以通过vcpkg来安装。类似于 apt-get、npm 、yum 等的命令功能。
1.自动下载三方开源库源代码。
2.一键安装第三方库。
3.源码包的缓存管理和版本管理,可以依需求安装指定的版本。
4.自动检查库的依赖关系并安装其依赖项。
5.无缝集成Visual Studio,不用手动设置任何的库相关的路径。
6.Visual Studio全平台支持,不仅支持Debug/Release、x86/x64编译,还支持UWP、ARM平台的编译。
dos命令窗口下
进入 D:\software目录
D:\software>git clone https://github.com/microsoft/vcpkg
待克隆下载完毕后,会在software目录下生成一个vcpkg目录。
D:\software>.\vcpkg\bootstrap-vcpkg.bat
此时有可能会报下面这个问题:
根据提示应该就是连接不到指定github服务器(这个是国外的服务器)。其实里面就是一个从远端下载vcpkg.exe的文件的操作。可以手动通过其他方式把它下载下来。然后放到D:\software\vcpkg根目录下。
我这里采用的是:通过华为云服务器(访问国外的网效果好些)来下载:
[root@iZ2zedddZ software]# wget https://github.com/microsoft/vcpkg-tool/releases/download/2023-12-12/vcpkg.exe
回车完后,等待下载完毕!会在当前目录下有一个vcpkg.exe文件
[root@iZ2zeddfx87fw4m4dlxu8dZ software]# ll -h
total 7.8M
-rw-r–r-- 1 root root 7.8M Dec 13 03:39 vcpkg.exe
将这个vcpkg.exe文件拷贝到Windows机器上下的,D:\software\vcpkg根目录下(上面有说明)。
配置系统环境变量:将D:\software\vcpkg添加到PATH环境变量下。
任意一个目录下:执行 vcpkg --version,如果打印有版本信息说明系统环境变量已配好。
和上面差不多,就是执行脚本:.\vcpkg\bootstrap-vcpkg.bat 改为 .\vcpkg\bootstrap-vcpkg.sh。
–triplet=x64-windows表示仅在windows上安装64位软件包
vcpkg help triplet #查看软件包支持的平台
现代软件基本上64位编译的,为节约磁盘空间,可以为–triplet设置系统环境变量“VCPKG_DEFAULT_TRIPLET=x64-windows”,表示默认安装在windows上安装64位软件包。
vcpkg integrate install #安装至Visual Studio
vcpkg integrate remove #从Visual Studio卸载
cd D:\software\vcpkg
git pull
vcpkg update
vcpkg upgrade --no-dry-run
vcpkg search PackageName
vcpkg install PackageName --triplet=x64-windows
#如果你设置了VCPKG_DEFAULT_TRIPLET系统环境变量则
vcpkg install PackageName
vcpkg remove PackageName
移除所有过时的软件包
vcpkg remove --outdated
vcpkg list
在cmake后添加CMAKE_TOOLCHAIN_FILE变量,值为vcpkg.cmake完整路径
cmake -DCMAKE_TOOLCHAIN_FILE=D:\software\vcpkg\scripts\buildsystems\vcpkg.cmake -Wno-dev
#-Wno-dev:【可选】抑制开发人员警告。 禁止对CMakeLists.txt文件的作者发出警告。
当你使用了段时间后,vcpkg占用了非常大的磁盘空间,这时您可以通过删除packages、buildtrees和downloads文件夹来节省一些磁盘空间。
rmdir /S /Q D:\software\vcpkg\packages
rmdir /S /Q D:\software\vcpkg\buildtrees
rmdir /S /Q D:\software\vcpkg\downloads
vcpkg目录说明
buildtrees: 【允许删除】编译软件包使用的目录
docs: 【不能修改删除】文档和示例
downloads: 【允许删除】所有已下载的工具或源的缓存副本。 运行安装命令时,vcpkg 会首先搜索此处,如果没有会自动下载
installed: 软件包编译后的安装目录,头文件(h/hpp)、库文件(lib/so/a)、二进制文件(dll/exe)。集成Visual Studio后,vs会自动链接到此目录,你只需要引用头文件即可。vs自动引用库文件(编译后vs会自动将库文件(dll/so/a)复制项目运行目录)。
installed\x64-windows\debug:表示此目录中的库文件(lib/so/a)、二进制文件(dll/exe)都是debug模式
installed\x64-windows\lib\manual-link:表示此目录中的库文件(lib/so/a)不会自动引用,需要你在项目中手动设置
packages: 【允许删除】在不同的软件包之间用于暂存的内部文件夹
ports: 【不能修改删除】用于描述每个库的目录、版本和下载位置的文件。 如有需要,可添加自己的端口
scripts: 【不能修改删除】由 vcpkg 使用的脚本(CMake、PowerShell)
toolsrc: 【不能修改删除】vcpkg和相关组件的 C++ 源代码
triplets: 【不能修改删除】包含每个受支持目标平台(如 x86-windows 或 x64-uwp)的设置
*.* 其它文件都不允许手动修改
因为vcpkg太过于自动化了,当开发完成后我们可能不知道使用项目依赖的软件包,我们可以通过下列命令查看:
从开始菜单输入 ”x64 Native Tools Command Prompt for VS 2019”中运行(前提是已安装 Visual Studio 2019)
dumpbin /DEPENDENTS PackageName.dll
或者
dumpbin /DEPENDENTS PackageName.exe
演示:
双击打开上述应用
如下:使用Windows上的dumpbin 命令不能用于.so库文件上。
ldd PackageName.so
ldd PackageName.a
ldd PackageName
演示
[root@iZ2zeddu8dZ local]# ldd libSignServerExJNI.so
linux-vdso.so.1 => (0x00007fff343ee000)
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f81e9942000)
libm.so.6 => /lib64/libm.so.6 (0x00007f81e9640000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f81e942a000)
libc.so.6 => /lib64/libc.so.6 (0x00007f81e905c000)
/lib64/ld-linux-x86-64.so.2 (0x00007f81ea14a000)
[root@iZ2zeddu8dZ local]# ldd SignServerExJNI.dll
not a dynamic executable #说明ldd命令不能用在dll文件上