修改时间:2014-5-10
1.参考
首先列出一些参考的网页:
李民录:
http://blog.csdn.net/liminlu0314/article/details/17400075
官网:
http://htmlpreview.github.io/?https://raw.github.com/qgis/QGIS/master/doc/INSTALL.html#toc13
2.准备
1)源码
本文使用QGIS的版本是2.0.1,下载地址https://github.com/qgis/QGIS/tree/release-2_0,选择下图红色方框,
或者从http://qgis.org/downloads/下载,这里可以下载到所有版本的QGIS。
在VS2010平台上编译。
2)工具与依赖库
工具
Tool |
Website |
CMake |
http://www.cmake.org/files/v2.8/cmake-2.8.4-win32-x86.exe |
Flex |
http://gnuwin32.sourceforge.net/downlinks/flex.php |
Bison |
http://gnuwin32.sourceforge.net/downlinks/bison.php |
SVN |
http://sourceforge.net/projects/win32svn/files/1.6.13/Setup-Subversion-1.6.13.msi/download |
or GIT |
http://msysgit.googlecode.com/files/Git-1.7.4-preview20110204.exe |
OSGeo4W |
http://download.osgeo.org/osgeo4w/osgeo4w-setup.exe |
这是从官网复制下来的,其中SVN与GIT为下载源码的工具,不是必须的。
cmake、flex、Bison这三个工具网上都说安装路径不能有空格与中文。
OSGeo4W用来下载依赖库(下载下来的依赖库都是release版本的,官方建议用RelWithDebInfo编译QGIS,我用release与Debug编译出错,但是我还没具体使用。李民录也用DEBUG编译没问题。)
依赖库包括如下,这些是官网推荐的,但是不是必须的,有些可以用内部编译的方式。可以先看完文章下一部分,再对应着在OSGeo4W中下相对应的库。
l expat
l fcgi
l gdal
l grass
l gsl-devel
l iconv
l pyqt4
l qt4-devel
l qwt5-devel-qt4
l sip
l spatialite
l libspatialindex-devel
l python-qscintilla
上述也是从官网上复制的,使用 OSGeo4W (select Advanced Installation),它会把依赖库的依赖库一并下载。
当然还要安装QT。安装完OSGeo4W与QT,都需要设置相应的环境变量。
3.编译
1)首先安装flex、Bison,安装路径不能有中文与空格,然后把安装的BIN路径添加到环境变量中去。默认的两者安装路径是一致的,所以一个文件夹下会同时出现flex与Bison的EXE文件,但是默认安装路径Program Files有空格,很方便的改一下就行,我安装到了C:\QGIS。
再把C:\QGIS\include\unistd.h文件拷贝至VC10的安装目录D:\ProgramFiles\Microsoft Visual Studio 10.0\VC\include,我VS2010安装在D盘。这一步操作是因为后面编译的时候提示没找到unistd.h文件,也可以先不操作,等后面编译的时候出现这个错误再说。
2)配置Cmake
首先还是新建一个Build文件,再在Cmake里面安置好路径, 编译器选择的是VS2010
第一次按Configure提示需要设置Flex执行文件的路径
然后是需要设置Bison执行文件的路径
接下来提示设置PROJ和GEOS库
接下来是GDAL
设置SQLite3和Expat的库
spatialindex库的路径
这个库OSGeo4W中好像没有头文件,所以我自己下载了一个,下载地址
http://download.osgeo.org/libspatialindex/libspatialindex-1.8.0-win-msvc-2010-x64-x32.zip
除此之外,我还设置了QWT
最后需要设置SetupAPI库的路径,这个库在程序安装目录的Windows SDKs目录里面C:\Program Files\Microsoft SDKs\Windows\v7.0A\Lib\SetupAPI.Lib
根据情况选择是否允许以下工具一起编译:
WITH_BINDINGS--------Python
WITH_GRASS-------------Grass
也就是内部库外部库的选择,这里我选择如下,
这些都设置完了,可能会出现SIP的错误,提示没找到这个,这时候就需要安装SIP,安装SIP之前要安装mingw32,可以借鉴
http://blog.csdn.net/sunny2038/article/details/7237630
http://blog.csdn.net/sunny2038/article/details/6918602
首先安装mingw32,现在都是用mingw-get-setup.exe进行在线安装,下载地址http://cznic.dl.sourceforge.net/project/mingw/Installer/mingw-get-setup.exe
默认设置之后会出现界面,我已经安装了部分,所以前面出现了绿色方框
选择要安装的package右击markfor installation,然后installation-apply changes,可能因为网速原因,可能会出现错误,提示没下载好,这时候就需要多次installation-applychanges,直到所有下载全为止。
之后就需要下载SIP,下载地址
http://www.riverbankcomputing.co.uk/software/sip/download/
将Riverbank上的sip的zip格式的代码包下载,将其解压到C:\Python27中(我的安装在D:\Program Files\Python275,但是图用的是上面介绍的博文中的),那么现在sip的文件夹路径为C:\Python27\sip-4.13.2\sip-4.13.2(你也可以将其解压到任何一个文件夹中,但这里为了叙述方便,就解压到我电脑上的Python的文件夹中)。
打开Windows的cmd命令行,输如cd C:\Python27\sip-4.13.2\sip-4.13.2跳转到sip文件夹下。 输入python configure.py --platform win32-g++。进行配置,显示结果如下:
再完成上一步后,输入mingw32-make,接着输入mingw32-make install。若无意外,SIP就安装完成了。
这些都设置完了应该就没错误了,然后Configure
打开SLN进行编译,生成140个项目,但是会有一个项目出现C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppCommon.targets(151,5): error MSB6006: “cmd.exe”这样的错误,我索性把这个项目删了,李民录的博文中介绍的是生成139个项目
等待编译完即可。
4.附录
1)李民录博文还提及:
注意:在编译的时候如果没有将GNU的几个软件安装到没有空格的路径中,或者没有加入环境变量path中,很有可能编译出错,错误信息一般如下:
下面我们就通过手动的方式来解决这个问题,首先在工程中找到编译出错的文件。首先来看qgis_core的错误,
[plain] viewplaincopyprint?
1. 1>Generating qgsexpressionparser.cpp
2. 1>E:\QGIS\GnuWin32\bin\bison.exe: m4: No such fileor directory
3. 1>Project : error PRJ0019: 某个工具从以下位置返回了错误代码:"Generating qgsexpressionparser.cpp"
4. 1>生成日志保存在file://e:\QGIS2\Build\src\core\qgis_core.dir\Debug\BuildLog.htm
我们打开上面的BuildLog.htm,会发现下面的文字:
出错的就是上面选中的那句执行的时候出错了,由于bison所在的目录没有安装到环境变量path里面导致的,我们将上面的这句话复制下,然后打开一个cmd命令行窗口,cd到bison的目录,如下图:
然后在窗口中执行上面的那句话,如果没有输出任何信息就说明OK了,然后回到VS中,继续点击生成即可,其他的flex错误类似这样解决即可。
如果之前没有配置SPATIALITE,所以我们需要修改源代码,编译的时候提示spatialite.h文件找不到的,将include“spatialite.h”注释掉,然后再次编译会提示有函数spatialite_init、spatialite_version、spatial_ref_sys_init找不到的,将该行注释掉,然后编译即可。
所有的工程编译完之后,会在Build目录下面的output\bin\debug\目录生成dll和exe,然后只需要将QGIS所有依赖的dll拷贝过来就可以双击qgis.exe运行了。依赖的dll主要有gdal、geos、proj、qt、qwt等。需要注意的是,要把gdalprovider.dll和ogrprovider.dll放到exe目录的plugins目录,否则不能打开数据。目录结构如下图。
下面是编译完启动的界面。如果想要界面汉化的话,使用QT提供的Linguist(语言家)工具,打开QGIS源码目录下的i18n目录下面的qgis_zh_CN.ts,然后点击文件菜单下面的发布为,将存储为一个qgis_zh_CN.qm的文件,最后将这个qm文件放到qgis.exe所在目录中新建一个i18n的目录,放到里面重新启动qgis就可以看到界面汉化了。