-
偷懒,可以直接下载笔者配置好的解决方案OSGeo4W64.rar,qgis版本final-3_16_12,按照start.txt的顺序在cmd窗口运行vs2015打开解决方案即可编译:
https://pan.baidu.com/s/1_4CgEGbz7MloD2mCsh1OIQ
提取码:rixi -
想自己动手就继续往下看
代码地址:https://github.com/qgis/QGIS.git
编译版本:tags/final-3_16_12 到 tags/final-3_18_0
说明:本文python模块没有编译通过,由于测试时最新库地址下载总是断,不管是否翻墙都无法下载完整。所以折中采用了国内源。有些小问题不影响使用。
1.所需环境
- 创建目录E:\OSGeo4W64
- 本次测试安装VS2015update3
http://download.microsoft.com/download/5/d/1/5d1ec81e-bc59-448f-9ab6-27636d5cc18a/vs2015.3.com_chs.iso - CMake
https://cmake.org/files/v3.12/cmake-3.12.3-win64-x64.msi - cywin64
https://cygwin.com/setup-x86_64.exe
通过cywin64安装GNU flex, GNU bison and GIT,安装后如下图
cywin64安装bin目录需要写到path,否则后续缺少flex和bison,如果不加path,需要将flex和bison的exe以及依赖库拷贝到E:\OSGeo4W64,本次编译采用了后一种做法。
- OSGeo4W库
这个理论上可以直接下载笔者提供的下载好的库,下载地址:如果选择这种方式,下面的步骤可以忽略。
这里下载过程也说一下,下载安装文件https://download.osgeo.org/osgeo4w/osgeo4w-setup-v2.exe 这个库安装采用在线安装方式,(如下图四),最新的库地址在默认网址里,但是不管是否翻墙都无法下载完整,因此采用add添加国内源,库比较老,只能编译比较老的QGIS版本,本次测试3.16.12-3.18.0都可以,但依然会有一个错误,由于不关注python模块,所以就忽略了这个错误。下载选择目录E:\OSGeo4W64,安装时将msinttypes skip掉(如下图三),否则和vs头文件冲突编译不过,其他库选择了全部安装,因为本来国内这个库比较老,害怕少库。 下载完后,vs编译还是没有问题,但是运行析构崩溃(如下图二),因为这个地址的spatialindex的include、lib与dll版本不一致,通过查找本地下载目录的spatialindex的库,将同一个版本的include、lib和dll拷贝到对应位置,E:\OSGeo4W64\bin、E:\OSGeo4W64\include\spatialindex、E:\OSGeo4W64\lib
图二
图三
图四
- ninja
https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip
解压后拷贝到E:\OSGeo4W64\bin目录下。
2.代码生成和编译
- 修改E:\OSGeo4W64\QGIS\ms-windows\osgeo4w\msvc-env.bat,如果vs默认安装,vs路径不用修改,修改cywin和cmake路径地址为本地安装路径。
- 下载上述qgis版本代码,本次测试下载路径为QGIS162
- 新建文件OSGeo4W-dev.bat,写入如下内容,启动cmd窗口运行。
@echo off
call E:\OSGeo4W64\QGIS162\ms-windows\osgeo4w\msvc-env.bat x86_64
@cmd
- 执行configonly.bat,生成解决方案。
cd E:\OSGeo4W64\QGIS162\ms-windows\osgeo4w
configonly.bat
- 在同一个cmd窗口确保如下文件都执行了之后,以后打开解决方案都要如此,devenv命令启动vs2015,打开解决方案文件E:\OSGeo4W64\QGIS162\ms-windows\osgeo4w\build-qgis-test-x86_64\qgis.sln,编译,python的两个项目编译报”C1001 编译器内部错误”,不用就没管。
E:\OSGeo4W64\OSGeo4W-dev.bat
E:\OSGeo4W64\bin\gdal-dev-env.bat
devenv
- 运行qgis,ALL_BUILD工程邮件属性–调试-> 命令-> C:\OSGeo4W64\QGIS\ms-windows\osgeo4w\build-qgis-test-x86_64\output\bin\RelWithDebInfo\qgis.exe如下图
- F5启动,项目过期编译点否,提示python模块加载失败如下图,关闭即可
到此结束,运行效果如下所示,随便打开一个shp
参考文章:
https://github.com/qgis/QGIS/blob/final-3_16_12/INSTALL.md
https://blog.youkuaiyun.com/xiaozy12/article/details/108843224