在使用C/C++编写项目时, 引用第三方库是很麻烦的事, 需要手动下载源码然后编译最后再添加到项目里,配置头文件、lib、dll,如果是一个简单点的库,编译加配置起来也不麻烦,可能半个小时或一个上午就能解决;如果是一个复杂点的库,那可能是一天、乃至一周可能都无法编译成功,例如ffmpeg, openssl,gRPC等等,这些库在windows上的的编译极其麻烦,如果是新手,可能更痛苦。相比 java有maven,python有pip,go有go mod, C#有NuGet,Rust有cargo,这些语言在导入第三方库时都很方便,修改版本也方便,但是对于C++项目则很痛苦,vcpkg的出现解决了C/C++编译第三库困难的问题,vcpkg跨平台, 在windows、linux、MacOS都可以使用。安装vcpkg,想要使用哪个库,vcpkg只要一条命令, 直接用安装编译,无需配置头文件、lib、dll, 直接写代码即可,十分的方便。
官网:https://vcpkg.io
1、安装vs英语语言包
vcpkg安装第三方库时,会有visual studio的语言不是英语的错误,如果不安装英语语言包,使用vcpkg安装第三方库时会有如下报错
Error: in triplet x64-windows: Unable to find a valid Visual Studio
instance The following VS instances were excluded because the English
language pack is unavailable:
例如我的电脑安装的是vs2022社区版,需要修改安装,增加英语语言包
设置-应用-vs2022
2.clone vcpkg
进入你想安装的文件夹(比如D:\vcpkg),打开PowerShell命令行执行
git clone https://github.com/Microsoft/vcpkg.git .
如果网络不好,可能无法clone, 需要有合理良好的网络环境(如何访问github请自查)。
vcpkag clone 好后,执行脚本bootstrap-vcpkg.bat下载vcpkg.exe,如下
$ bootstrap-vcpkg.bat
如果你的rust环境是gnu的,务必切换回msvc
$ rustup default stable-msvc
直接在vcpkg上安装gtk(最新的vcpkg默认就是gtk4)
$ vcpkg install gtk --triplet x64-windows
安装好后(安装时间很长,请耐心等待,我等了1个多小时,见上图),只需要设置两个环境变量
(下文的%VCPKGDIR%是你vcpkg的安装目录,不要照搬)
$ SET PKG_CONFIG_PATH %VCPKGDIR%\installed\x64-windows\lib\pkgconfig
$ SET GTK_LIB_DIR %VCPKGDIR%\installed\x64-windows\lib
将vcpkg装好的gtk4库的dll暴露到搜索路径中,加入环境变量PATH中
$ SET PATH=%VCPKGDIR%\installed\x64-windows\bin;%PATH%
然后编写一个Cargo.toml
[dependencies]
gtk = { version = "0", package = "gtk4" }
就可以用gtk-rs开发了
生成的文件不大,release模式编译完,加上dll依赖,用7z压缩完不到6Mb,程序非常小巧。
一开始,我把vcpkg安装到D:\Program Files\vcpkg下出现如下问题:
Call Stack (most recent call first):
scripts/cmake/vcpkg_build_make.cmake:151 (vcpkg_execute_build_process)
scripts/cmake/vcpkg_install_make.cmake:2 (vcpkg_build_make)
ports/libiconv/portfile.cmake:39 (vcpkg_install_make)
scripts/ports.cmake:170 ...
error: building libiconv:x64-windows failed with: BUILD_FAILED Elapsed time to handle libiconv:x64-windows: 6.5 min
libtool: error: 'Files/vcpkg/buildtrees/libiconv/x64-windows-dbg/lib/libcharset.la' is not a directoryCMake Error at
问题总结:
win11下,能确定的是D:\Program Files\vcpkg需要管理员权限才能可写,至于为什么会出现如上的问题,不得而知;后来我把vcpkg安装到D:\vcpkg下终于编译安装成功。
下载package-confg工具pkg-config-lite(zip压缩包,我们只需要bin目录下的单文件),并将该可执行文件的目录设置环境变量。