https://blog.csdn.net/deirjie/article/details/48216773
今天心血来潮,将QGis在github上的代码更新后,又编译了一下。留意到源代码包里面的INSTALL文件有更新,于是本次编译完全基于官方的编译说明。编译过程非常顺利,除了在CMake的第一次configure的时候弹出了一个小错误外,后续的工程生成、VS编译都完全没有遇到错误。特此记下源码build过程,供大家参考。
本次分为两个部分,分别介绍QGis二次开发包的下载以及QGis2.9的源码编译过程。
QGis二次开发包下载
QGis提供了编译好的二次开发包,可以通过osgeo4w这个工具来下载。具体操作步骤如下:
1、下载osgeo4w
下载地址:
32位:http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe
64位: http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe
2、在osgeo4w安装过程中选择QGis二次开发包
安装过程中选Advanced Install就可以下载资源包了,安装路径建议保持默认路径。当然也可以修改,只是修改后会牵涉到相应的路径变量的修改,保持默认会比较简单些。
-
3、选择QGis二次开发包
一路next到下一步的界面时,在Search栏目里输入“qgis”,可以查询到QGis的相关资源。打开Libs目录,如下图,标红框的库就是QGis可用于二次开发的资源库。其中”ltr”的版本表示long time release, 是比较稳定的发布版本。点击相应的库,使之由符号”n/a”变成一个打上叉的方框形状就表示选中相应的文件了,之后将会下载这个文件。
然后一直“下一步”,下载安装完成之后,就可以在osgeo4w的安装路径下面找到QGis开发相关的include和lib文件夹了。(注意:我之前安装过,所以在相应资源前面显示的是”Keep”字样,没有安装之前应该是”Skip”字样,截图仅供参考)
-
QGis2.9源码build及编译
build的过程主要是利用cmake进行,关键点在于对依赖库的设置。而 这一步一旦设置好之后,在编译器里进行编译就非常顺利了。
1、下载 osgeo4w 及 cygwin
osgeo4w的下载地址:
32位:http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe
64位: http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe
cygwin的下载地址:
32位: http://cygwin.com/setup-x86.exe
64位:http://cygwin.com/setup-x86_64.exe
osgeo4w主要用来安装各种依赖库,而cygwin则是用于安装flex和bison这两个工具。
2、osgeo4w的安装
安装过程与上文中基本一致,所不同的地方在于安装的依赖库。
同样,选择Advanced Install安装方式,并选择默认的Install from internet。安装路径建议保持默认路径。当然也可以修改,只是修改后会牵涉到相应的路径变量的修改,保持默认会比较简单些。
-
一直点击“下一步”,在安装过程进行到如下图所示界面时,在search栏目中填入相应的依赖库名称进行搜索,点击相应的库,使之由符号”n/a”变成一个打上叉的方框形状就表示选中相应的文件了,之后将会下载这个文件。(注意:我之前安装过,所以在相应资源前面显示的是”Keep”字样,没有安装之前应该是”Skip”字样,截图仅供参考)
-
具体需要安装的依赖库包括:
- expat
- fcgi
- gdal
- grass
- gsl-devel
- iconv
- pyqt4
- qt4-devel
- qwt5-devel-qt4
- sip
- spatialite
- libspatialindex-devel
- python-qscintilla
记住在搜索的时候选择下载的文件应该是在Libs目录下的,至于有时候会有很多个名字相近或者后缀名不同的文件被搜索到,大部分都可以通过文件描述来排除不合适的文件。不过不确定的话就都下载也没关系的,原则就是宁多勿少。
然后一直”下一步”就可以顺利安装完成了,完成后会有一个提示让重启电脑,重启一下就好了。
3、cygwin的安装
这个软件的安装界面同osgeo4w基本相同,也是同样Install from internet,就可以一路”下一步”进行下去了。同样,安装路径建议保持默认路径。当然也可以修改,只是修改后会牵涉到相应的路径变量的修改,保持默认会比较简单些。
到达选择安装资源库文件的界面,同样在Search栏目中填入相应的名称搜索即可。这里需要搜索安装的是”flex”和”bison”。要注意的是,这一次应该选择Devel目录下的资源文件,而不是Libs。这个安装不需要重启,安装完成关掉就行。(注意:我之前安装过,所以在相应资源前面显示的是”Keep”字样,没有安装之前应该是”Skip”字样,截图仅供参考)
4、下载安装Cmake
下载地址:
http://www.cmake.org/files/v3.0/cmake-3.0.2-win32-x86.exe
这个安装就跟windows的大多数软件一样很常规了,就不赘述了。
5、源代码包生成IDE工程文件
到达这一步,准备工作就基本完成了,可以开始正式生成IDE的工程文件了。我后续的步骤与以前的文章有很大不同(以前写的QGis1.8版本的文章链接),之前那个方法比较繁琐,但也是可行的。现在这个方法更为简洁,而且基本不会出现错误。
首先,新建一个文本文件,并将它的后缀名改成”.bat”,表示批处理文件。用记事本打开这个文件,将下面的代码粘贴进去:
@echo off set VS10COMNTOOLS = D:Program FilesMicrosoft Visual Studio 10.0Common7Tools call "D:Program FilesMicrosoft Visual Studio 10.0VCvcvarsall.bat" x86 set INCLUDE=%INCLUDE%;C:Program FilesMicrosoft SDKsWindowsv7.1Ainclude set LIB=%LIB%;C:Program FilesMicrosoft SDKsWindowsv7.1Alib set OSGEO4W_ROOT=C:OSGeo4W call "%OSGEO4W_ROOT%ino4w_env.bat" path %PATH%; %PROGRAMFILES%CMakein; c:cygwinin @set GRASS_PREFIX=c:/OSGeo4W/apps/grass/grass-6.4.4 @set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%include @set LIB=%LIB%;%OSGEO4W_ROOT%lib;%OSGEO4W_ROOT%lib @cmd
这段代码当中,我们需要注意的地方如下:
“VS10COMNTOOLS”:根据Visual Studio的版本不同会有不一样的地方,你只需要查看后面的路径是不是与你本机VS安装路径中一致就行。如果不一致,则只需将版本对应的地方改成与你安装的版本一致的路径。同样第二行”Call”中的路径也要对应于VS版本号。例如如果是VS2008,这两行代码就应该变成:
set VS90COMNTOOLS=%PROGRAMFILES%Microsoft Visual Studio 9.0Common7Tools
call "%PROGRAMFILES%Microsoft Visual Studio 9.0VCvcvarsall.bat" x86
- 1
- 2
接下来的两行代码中,指明的windows SDK路径也会根据windows版本不同而不同。这里我使用的是windows 10,因此后面的路径为”v7.1A”。大家只需更改为对应自己机器的相应版本号路径就行了。
讲到这里我想大家都看明白了,再接下来的代码全部都是与osgeo4w、cmake和cygwin的安装路径有关的。如果之前安装的时候默认路径,那么这里就不需要改。安装的时候把路径改了,这里就把相应的路径字符串改成安装时指定的路径。
修改完后,保存这个”.bat”文件,文件名无所谓。
然后,按快捷键win+R调出运行窗口,并输入”cmd”,回车,打开命令行窗口。在命令行窗口中执行刚刚新建的”.bat”文件。执行完毕后会设置好相应的依赖库路径变量。
然后继续运行“cmake-gui.exe”,打开CMake。
进入GUI,首先分别在源代码路径和生成文件路径选择相应的文件夹位置。之后,点击Configure按钮。
选择对应的编译器版本,这里选用的是Visual Studio 10 2010
点击确定就开始配置源代码文件了。我配置的时候出现了一次错误,如下图所示。这个问题是由于缺少了某些插件的依赖库导致的,我们可以通过不Build这些插件来避免这个错误。
事实上,必须的编译选项我们只要”With_Desktop”以及” With_Internal_Qextserialport”就行了。
这时,再点击Configure按钮就没有错误了,然后再点击旁边的Generate按钮,就能成功生成VS2010的工程文件了。
6、源代码工程编译
双击打开”qgis2.9.0.sln”这个工程文件,就可以加载工程到VS中了。总共有148个项目。
先将编译模式改成”RelWithDebInfo”
之后生成项目就行了。
当然,你也可以选择“ALL_BUILD”,但这样会比较耗时。比较快速的办法是,先全部选中子工程,右键,卸载项目
然后只用单独加载
- ui
- qgis_core
- qgis_analysis
- qgis_gui
- qgis_app
- qgis
- ogrprovider
- gdalprovider
单独生成这几个项目,就能够成功编译了。生成”exe”运行之前,需要将所需的”dll”文件都拷贝到”exe”的目录下。最简单的做法就是将你本机QGis的安装路径找到,在”bin”文件夹下面选中所有”dll”文件,然后一起复制到编译生成的”exe”文件夹里面。当然,没有安装QGis的话,需要将Qt4的”dll”文件、osgeo4w安装路径下”bin”文件夹中的”dll”文件,以及别的依赖的”dll”文件都拷贝过来才能正确运行。
需要说明的是,这样编译出来的exe运行后可能会有个别工具栏图标不显示的情况,但除此之外没有别的问题。
最后
我按照这种方式编译并没有产生任何编译错误,我希望参照我的方法的朋友也能顺利编译,如果有问题可以多多交流和分享,谢谢。