QGIS2.3.0官方推荐采用VS2008进行编译,GUI使用Qt4.7.1-VS2008,脚本使用Python2.7.4。QGIS 插件包括CPP插件和Python插件两种,使用Qt4加载CPP插件,使用Python2加载Python插件,有些Python插件(例如processing插件)依赖于PyQt4,PyQt4依赖于Qt4-VS2008。QGIS的有些依赖库(例如Qwt5)依赖于Qt4-VS2008。
若采用VS2010直接进行编译,在调用QGIS的过程中会出现兼容性错误,例如加载processing插件时引起异常中断错误,导致程序崩溃。
安装Qt4.8.5-VS2010之后,采用VS2010进行编译,在调用QGIS的过程中依然出现兼容性错误,例如加载Qwt5依赖库时引起异常中断错误,导致程序崩溃。
因此,采用VS2010进行编译之前,需要将Qt4-VS2008更新为Qt4-VS2010版本,包括所有使用了Qt4-VS2008的插件和依赖库。
1、安装CMake 2.8
(1)下载地址:http://www.cmake.org/
(2)安装路径:自定义,例如:C:\GNU\CMake2.8
2、安装GNUWin32 flex 2.5和bison 2.4
(1)下载地址:http://gnuwin32.sourceforge.net/packages/flex.htm和.../bison.htm
(2)安装路径:自定义,例如:C:\GNU\GnuWin32
说明:Flex/Bison常用安装程序有两种:GnuWin32 Flex 2.5/Bison 2.4和Win flex-bison 2.5 (http://sourceforge.net/projects/winflexbison/),推荐安装GnuWin32Flex 2.5/Bison 2.4。
3、下载QGIS 2.3源代码
(1)下载地址:https://github.com/qgis/QGIS
(2)解压路径:自定义,例如:C:\qgis230-source\QGIS-master
说明:源代码压缩包中提供了安装说明(QGIS-master\doc\INSTALL.html)。
4、通过OSGeo4W Installer 32bit安装QGIS 2.3依赖库
(1)下载地址:https://trac.osgeo.org/osgeo4w/
(2)运行OSGeo4W,选择Advanced Install -> Install from Internet or Install from LocalDirectory –> Root Directory (Default: C:\OSGeo4W) -> Select Packages: qgis-full-dev。
(3)缺省QGIS 2.3开发包(qgis-full-dev)未安装Qwt5开发包(Qwt5-devel-qt4)和Spatialindex开发包(libspatialindex-devel),需要单独安装这两个开发包。
说明:QGIS依赖库头文件位于C:\OSGeo4W\include路径下,静态库文件位于C:\OSGeo4W\lib路径下,qmake.exe等工具位于C:\OSGeo4W\bin路径下,外部可执行程序包位于C:\OSGeo4W\apps路径下。
5、设置环境变量
(1)打开系统命令提示符,在控制台模式下设置环境变量中
(2)调用OSGeo4W\bin\o4w_env.bat批处理文件,将自动递归调用OSGeo4W \etc\ini\*.bat批处理文件,设置OSGeo4W运行环境变量,例如:
call "C:\OSGeo4W\bin\o4w_env.bat"
其中用于CMake生成VS解决方案的变量包括:
OSGEO4W_ROOT=C:\OSGeo4W
PATH=%OSGEO4W_ROOT%\bin;%PATH%
PYTHONHOME=%OSGEO4W_ROOT%\apps\Python27
PATH=%OSGEO4W_ROOT%\apps\Python27\Scripts;%PATH%
说明:CMake使用PYTHONHOME查找SIP包所在路径。
(3)在环境变量INCLUDE和LIB中添加OSGeo4W依赖库头文件和静态库文件所在路径,或者在环境变量PATH中添加依赖库头文件和库文件所在路径。例如:
setINCLUDE=%OSGEO4W_ROOT%\include;%INCLUDE%
set LIB=%OSGEO4W_ROOT%\lib;%LIB%
(4)定义GRASS_PREFIX,例如:
setGRASS_PREFIX=c:/OSGeo4W/apps/grass/grass-6.4.3
注意:在GRASS_PREFIX路径中不要使用’\’代替’/’,否则CMake将产生错误。
(5)在环境变量PATH中添加添加GNUWin32 Flex/Bison可执行文件所在路径,例如;
set C:\GNU\GnuWin32\bin
(6)在环境变量PATH中添加CMake可执行文件所在路径,例如:
C:\GNU\CMake2.8\bin
(7)调用VS2010的\VC\vcvarsall.bat批处理文件,将自动递归调用VC\bin\vcvars32.bat和%VS100COMNTOOLS%vsvars32.bat批处理文件,例如:
call "C:\Program Files\MicrosoftVisual Studio 10.0\VC\vcvarsall.bat" x86 或
call "C:\Program Files (x86)\MicrosoftVisual Studio 10.0\VC\vcvarsall.bat" x86
其中用于CMake生成VS解决方案的变量包括:
VS90COMNTOOLS =C:\Program Files\MicrosoftVisual Studio 10.0\Common7\Tools\或
VS90COMNTOOLS =C:\Program Files (x86)\MicrosoftVisual Studio 10.0\Common7\Tools\
LIB=”C:\Program Files\MicrosoftSDKs\Windows\v7.0A\Lib; %LIB%;”或
LIB=”C:\Program Files (x86)\MicrosoftSDKs\Windows\v7.0A\Lib; %LIB%;”
说明:CMake需要在环境变量PATH或LIB中查找Microsoft SDKs 的SetupAPI.Lib,找到后定义SETUPAPI_LIBRARY变量。
特别注意:系统环境变量PATH中路径之间分号的前后不要加空格,否则CMake解析路径时出现错误。
6、复制GNUWin32 Flex/Bison的unistd.h头文件
QGIS编译时需要GNUWin32Flex/Bison的unistd.h头文件,将GnuWin32\include\unistd.h头文件复制到VC\include路径下,例如:C:\ProgramFiles\Microsoft Visual Studio 10.0\VC\include或C:\Program Files(x86) \Microsoft Visual Studio 10.0\VC\include。
说明:在环境变量INCLUDE或PATH中添加GNUWin32 Flex/Bison的unistd.h头文件所在路径,VS2010编译时仍然找不到unistd.h,因此必须复制该文件。