QGIS3.10+VS2019+QT5.14编译(附视频教程)
最近公司的项目要用到QGIS,所以花了几天时间研究了一下,编译了两个版本(另一个是QGIS2.18+VS2013+QT5.7.1),使用vs2013编译QGIS比较麻烦,我试了好多QGIS版本都不行,而且不能使用官方提供的依赖库(需要支持c++11),所以个人推荐使用vs2015以上的编译器。
视频教程
https://www.bilibili.com/video/BV1Ho4y1o7ni
编译环境
下载QGIS3.10.13(官方提供的长期稳定版,https://qgis.org/downloads/qgis-latest-ltr.tar.bz2)源代码,同时下载cygwin(https://cygwin.com/setup-x86_64.exe)和OSGeo4W(https://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe),参考官方帮助文档(https://github.com/qgis/QGIS/blob/master/INSTALL.md#4-building-on-windows)进行编译。
安装bison和flex
双击Cygwin应用程序,初始界面点击下一步,安装选项为默认,然后下一步,如下图
选择安装目录,下一步,在选择本地安装包存放目录(安装完成后需要手动删除),下一步,选择默认项Direct Connection,下一步选择镜像,如下图
如果提示找不到镜像地址,可以去官网(https://cygwin.com/mirrors.html)自己查找然后添加进去,下一步弹出安装包选择界面,分别在search框输入flex和bison,展开搜索结果,在skip处双击,会出现对应的版本号,表示要安装该版本,如下图
之后的过程一直下一步到最后
安装qgis-dev-deps
启动OSGeo4W ,选择 Advanced Install,后面的步骤与安装bison和flex非常类似,只不过在搜索框中搜索qgis-dev-deps,这里不做详细介绍,这一步完成后,QGIS的所有依赖项都会默认下载到OSGEO4W64文件夹下(具体路径和文件名可以指定,建议文件夹名不要改)
配置环境变量
配置环境变量的目的是让cmake自动寻找相关依赖项,如果没有这一步,那么所有的依赖项都需要我们手动输入,特别麻烦。
启动vs2019本地命令提示符(直接启动Windows命令提示符工具也可以,但是Windows SDK需要自己配置),如下图
在命令行中分别配置以下环境变量(具体路径根据本机实际安装包所在目录修改,尤其是第一项):
set OSGEO4W_ROOT=F:\QGIS_VS2019_QT5.14\3dpart\OSGEO4W64
call "%OSGEO4W_ROOT%\bin\o4w_env.bat“
call "%OSGEO4W_ROOT%\bin\py3_env.bat“
call “%OSGEO4W_ROOT%\bin\qt5_env.bat”(这是OSGEO4W自带的QT环境,如果不用这个,则不需要配置)
set QtDir=C:\Qt\Qt5.14.1\5.14.1\msvc2017_64(使用本机安装的QT5.14)
set QT_PLUGIN_PATH=%QtDir%\plugins(插件目录)
path %path%;%QtDir%\bin;%OSGEO4W_ROOT%\bin;F:\QGIS_VS2019_QT5.14\3dpart\cygwin64\bin
set O4W_ROOT=%OSGEO4W_ROOT:=/%
set LIB_DIR=%O4W_ROOT%
set GRASS_PREFIX=%OSGEO4W_ROOT%/apps/grass/grass78
set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib
set LIB=%LIB%;%OSGEO4W_ROOT%\lib
“C:\Program Files (x86)\CMake\bin\cmake-gui.exe“(启动cmake)
安装QT附加依赖项
如果不使用OSGEO4W自带的QT环境(QT5.11),许多QT的依赖库需要单独编译安装,我用的QT5.14直接使用OSGEO4W提供的依赖库也能编译通过,但是我还是重新编译了一下,主要有QCA、QWT、QtKeyChain、QSCINTILLA、QtWebkits.
配置cmake
以上环境搭建完成后。配置cmake就比较简单了,如果有依赖库找不到的地方可以手动添加,具体过程可以看我录制的视频,这里就不多做介绍了
编译
编译过程中会出现一些问题,如果提示“常量中有换行符”这类编译错误,则需要在工程->属性->C+±>命令行输入/utf-8,如下图
同时需要注意不能编译Debug,因为OSGEO4W提供的依赖项都是Release模式的,编译完成后将qgis设为启动项目,然后在工程属性中添加QT的环境变量,如下图
点击本地Windows调试按钮(或按F5),启动qgis如下图所示
启动过程中提示Python Error,这个问题目前我也没解决,由于python环境已经配置了,而且已经安装PyQt5,但是QGIS就是提示找不到模块,但这个影响不大, 完全不影响源代码的调试。