一、背景
Qt就不介绍了。VCPKG可以看这里VCPKG资料记录_vcpkg boost 多久-CSDN博客
为什么搞Qt5而不是Qt6?因为Qt5比较稳定吧。而且我公司也是用的Qt5。
为什么要自己编译而不是去下载Qt5?
第一,因为Qt5在Qt在线安装版本只提供到Qt5.15.2,而VCPKG提供的编译版本是Qt5.15.13。
第二,VCPKG在编译前会应用多个漏洞修复的代码。如下所示,所以编译出来的Qt5.15.13应该更安全。(理论上来说,这算是自己修改了Qt5的代码,那么,根据LGPLv3说明,需要把修改后的Qt代码开源,这样才不需要购买Qt商业授权,可以继续使用LGPLv3的协议动态链接Qt5相关的DLL)
第三,为了方便后面使用Qt5时遇到问题,自己修改源码(修改后开源即可),重新编译DLL,总比报告Qt等Qt公司修复要快。
注意Qt各个模块的协议,可以从这里看到Qt Features, Framework Essentials, Modules, Tools & Add-Ons
二、编译
以安装Qt5-base为例,在命令行界面执行下面命令,等待编译完成即可(根据电脑和网络环境,需要的耗时不一,我这里花费了1小时左右,仅供参考)
.\bootstrap-vcpkg.bat
.\vcpkg.exe install qt5-base --triplet x86-windows
其中.\bootstrap-vcpkg.bat是用来下载vcpkg.exe的。如果已经下载了vcpkg.exe,则无需执行。
--triplet x86-windows指定编译x86版本的DLL。vcpkg目前的版本默认只会编译x64版本的DLL。
编译完成可以看到qt5-base里面包含的Qt组件如下
源码如下
三、使用
这里说一个简单的使用方式。
在VCPKG目录执行下面.\vcpkg.exe integrate install命令,开启全局依赖
创建VS WIN32窗口项目
添加Qt5的include路径
添加下例代码,运行即可
#include <Windows.h>
#include <QtWidgets/qapplication.h>
#include <QtWidgets/qwidget.h>
int WINAPI WinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPSTR lpCmdLine,
_In_ int nShowCmd
)
{
QApplication app(__argc, __argv);
QWidget w;
w.show();
return app.exec();
}
查看程序的输出目录,可以看到依赖的DLL均已复制到目录下。这也是使用VCPKG的好处之一。