QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6

一、参 考
李民录老师:
http://blog.csdn.net/liminlu0314/article/details/17400075
Jacory Gao:
http://blog.csdn.net/deirjie/article/details/48216773
QGIS官网:
https://htmlpreview.github.io/?https://raw.github.com/qgis/QGIS/master/doc/INSTALL.html#toc14
简单程序员:
https://www.cnblogs.com/xiaojian1987/p/8342104.html

二、软件下载
1、工具软件

(1)Cmake:主要用于编译,从官网直接下载即可
https://cmake.org/download/
(2)Cygwin:用于下载bison,flex软件
https://cygwin.com/install.html
(3)OSGeo4w:用于下载QGIS依赖库
http://trac.osgeo.org/osgeo4w/
(4)QGIS源码

https://www.qgis.org/en/site/forusers/download.html

2、Cygwin的安装
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第1张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第2张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第3张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第4张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第5张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第6张图片
 注意:未下载的前面显示"skip",点击会变成具体的版本,我这里是"keep",因为我之前下载过,按照上面的说明,下载flex、bison,上面的路径不要有中文或空格。

3、OSGeo4w的安装 
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第7张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第8张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第9张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第10张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第11张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第12张图片
说明:(1)这里的操作和Cygwin基本一致;(2)Search输入要下载的内容,具体包含:expat,fcgi,gdal,grass,gsl-devel,iconv,libzip-devel,libspatialindex-devel,pyqt5,python3-devel,python3-qscintilla,python3-nose2,python3-future,python3-pyyaml,python3-mock,python3-six,qca-qt5-devel,qca-qt5-libs,qscintilla-qt5,qt5-devel,qt5-libs-debug,qtwebkit-qt5-devel,qtwebkit-qt5-libs-debug,qwt-devel-qt5,sip-qt5,spatialite,oci,qtkeychain,libzip,qjson。


三、Cmake配置
1、创建batch文件
如果上述的包在默认的路径下安装(batch文件后缀名为bat),bat文件为:

@echo off
set VS140COMNTOOLS = D:\work\AZWJ\VS\Common7\Tools\
call "D:\work\AZWJ\VS\VC\vcvarsall.bat" x64
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include
set LIB=%LIB%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Lib
set OSGEO4W_ROOT=D:\work\AZWJ\QGISSELF\OSGeo4w
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
set O4W_ROOT=%OSGEO4W_ROOT:\=/%
set LIB_DIR=%O4W_ROOT%
path %path%;D:\work\AZWJ\VS\VC\bin
path %PATH%;D:\work\AZWJ\QGISSELF\cmake\cmake\bin;D:\work\AZWJ\QGISSELF\cygwin\bin
@set GRASS_PREFIX=D:/work/AZWJ/QGISSELF/OSGeo4w/apps/grass/grass-7.4.0
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib
set LIB=%LIB%;%OSGEO4W_ROOT%\apps\Qt5\lib;%OSGEO4W_ROOT%\lib
set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\apps\Qt5\include;%OSGEO4W_ROOT%\include
@cmd

说明:上面的路径要根据自己的实际情况,做适当地改变,特别是我红色标注的地方,做好这一步后面会省去很多事情。(1)VS140COMNTOOLS表示VS15,call后续跟的X64表示64位编译;(2)Include表示头文件,这里加了Win10系统的sdk;Lib表示编译的动态库;(3)Path表示环境变量;(4)特别注意:GRASS_PREFIX的路径地址必须是“/”,Path路径多个;之间不能有空格。

2、配置
启动cmd,进入命令行窗口,先执行上面的bat文件,然后进入cmake。
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第13张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第14张图片
说明:点击Configure之后会遇到错误,很容易解决,这里就不一一解决了,下面是我的最终截图:
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第15张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第16张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第17张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第18张图片QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第19张图片QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第20张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第21张图片
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第22张图片
四、编译
1、将debug模式改为ReWithdebInfo

QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第23张图片

2、移除不依赖的项目,保留依赖项目,将qgis设置为启动项
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第24张图片
3、全部编译后,生成的所有文件在Build->output->bin->RelWithDebInfo目录下,截图如下:

QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第25张图片
五、主要问题

1、WinMain问题
在编译qgis工程时,会出现Winmain程序入口问题,因为新建项目的时候选择的是控制台应用程序,控制台应用程序的入口是main。而在.CPP文件中提供的是windows入口函数WinMian。

QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第26张图片
解决方法:
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第27张图片

2、启动qgis.exe 提示缺少各种dll文件,可以将OSGeo4W64\apps\Qt5\bin下的dll全部拷贝到同目录下,也可以把这个bin路径设置到环境变量下。
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第28张图片
3、再次启动qgis.exe 会出现下面的问题

QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第29张图片
解决方法:将OSGeo4W64\apps\Qt5\plugins文件下的platforms文件夹拷贝到刚才的目录即可,截图如下:
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第30张图片4、再次启动,成功。

QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第31张图片

4. 在编译qgis_core时提示找不到,注释掉即可。
5. 提示有常量符,改成下面的样子就好了。
QGIS编译---QGIS2.18.16 + Qt5.9.2 + VS2015(X64) + Python3.6_第32张图片

你可能感兴趣的:(QGIS二次开发)