QGIS源码编译步骤详解——官方新方案
方案详细可见源码文件中INSTALL.md。
源码下载
QGIS源码下载:https://github.com/qgis/QGIS/releases
建议3.16版本,本文源码版本3.16.3。
3.22版本编译后会出现大量关于inline的错误,暂时不知如何解决。
环境下载
Cygwin64
- 下载Cygwin64安装包,setup-x86_64.exe。
- 安装Cygwin64,并安装Flex、Bison。
Flex >= 2.5.6
Bison >= 2.4

OSGeo4W
- 下载OSGeo4W安装包,setup-x86_64.exe。
- 安装OSGeo4W,并安装QGIS依赖环境qgis-dev-deps或qgis-ltr-dev-deps,本文安装的3.13.0版本。

注:官方源现在只能下到3.22以上版本的依赖环境,环境的内容、版本、路径都发生了比较大的改变,与老版本的源码兼容性不好, 依赖环境建议qgis3.16及以下。武大源可以安装3.13.0版本的依赖环境:http://gwmodel.whu.edu.cn/mirrors/osgeo4w
CMAKE
- 下载安装CMake。https://cmake.org/download/
本文Cmake3.22.3
Visual Studio 2017
下载安装Visual Studio
2017。https://visualstudio.microsoft.com/zh-hans/downloads/安装C++桌面开发组件。除默认的以外,还需安装Windows 10 SDK(10.0.14393.0) ,会用到SetupAPI.Lib。

注:建议Visual Studio 2017。Visual Studio 2015可能会出现fatal error C1001: 编译器中发生内部错误。
环境配置
- 移动到源码文件的的F:\QGIS-final-3_16_3\ms-windows\osgeo4w目录下。
- 打开msvc-env.bat(可用vs code),将其中的Visual
Studio、OSGEO4W、CMake、Cygwin64的相关路径修改为上述软件在自己设备上实际的路径。主要修改路径如下:
:x86_64
set VCARCH=amd64
set CMAKE_COMPILER_PATH=E:\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64
set DBGHLP_PATH=E:\Microsoft Visual Studio\2017\Community\Common7\IDE\Remote Debugger\x64
set SETUPAPI_LIBRARY=C:\Program Files (x86)\Windows Kits\10\Lib\%VCSDK%\um\x64\SetupAPI.Lib
############################################################
if "%OSGEO4W_ROOT%"=="" if "%ARCH%"=="x86" (
set OSGEO4W_ROOT=E:\OSGeo4W
) else (
set OSGEO4W_ROOT=E:\OSGeo4W
)
if not exist "%OSGEO4W_ROOT%\bin\o4w_env.bat" (echo o4w_env.bat not found & goto error)
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
############################################################
set VS150COMNTOOLS=E:\Microsoft Visual Studio\2017\Community\Common7\Tools
call "E:\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvarsall.bat" %VCARCH%
path %path%;E:\Microsoft Visual Studio 14.0\VC\bin
set GRASS7=
if exist %OSGEO4W_ROOT%\bin\grass74.bat set GRASS7=%OSGEO4W_ROOT%\bin\grass74.bat
if exist %OSGEO4W_ROOT%\bin\grass76.bat set GRASS7=%OSGEO4W_ROOT%\bin\grass76.bat
if exist %OSGEO4W_ROOT%\bin\grass78.bat set GRASS7=%OSGEO4W_ROOT%\bin\grass78.bat
if "%GRASS7%"=="" (echo GRASS7 not found & goto error)
for /f "usebackq tokens=1" %%a in (`%GRASS7% --config path`) do set GRASS_PREFIX=%%a
set PYTHONPATH=
if exist "E:\CMake\bin" path %PATH%;E:\CMake\bin
if exist "E:\CMake\bin" path %PATH%;E:\CMake\bin
if exist E:\cygwin64\bin path %PATH%;E:\cygwin64\bin
if exist E:\cygwin\bin path %PATH%;E:\cygwin\bin
set LIB=%LIB%;%OSGEO4W_ROOT%\apps\Qt5\lib;%OSGEO4W_ROOT%\lib
set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\apps\Qt5\include;%OSGEO4W_ROOT%\include
############################################################
##构建时可能会找不到gdal304.dll和proj_8_2.dll,而报error MSB6006: “cmd.exe”已退出,代码为 -1073741515,因此添加下述gdal和proj环境路径。
############################################################
path %path%;E:\OSGeo4W\apps\gdal-dev\bin
path %path%;E:\OSGeo4W\apps\proj-dev\bin
- 打开package-nightly.cmd(可用vs code),修改qgis依赖库路径。主要关注下面的路径是否有错:
%O4W_ROOT%和%OSGEO4W_ROOT%都为OSGeo4W路径。
-D PROJ_LIBRARY=%O4W_ROOT%/apps/proj-dev/lib/proj.lib ^
-D PROJ_INCLUDE_DIR=%O4W_ROOT%/apps/proj-dev/include ^
-D GDAL_LIBRARY=%O4W_ROOT%/apps/gdal-dev/lib/gdal_i.lib ^
-D GDAL_INCLUDE_DIR=%O4W_ROOT%/apps/gdal-dev/include ^
-D GEOS_LIBRARY=%O4W_ROOT%/lib/geos_c.lib ^
-D SQLITE3_LIBRARY=%O4W_ROOT%/lib/sqlite3_i.lib ^
-D SPATIALITE_LIBRARY=%O4W_ROOT%/lib/spatialite_i.lib ^
-D PYTHON_EXECUTABLE=%O4W_ROOT%/bin/python3.exe ^
-D SIP_BINARY_PATH=%PYTHONHOME:\=/%/sip.exe ^
-D PYTHON_INCLUDE_PATH=%PYTHONHOME:\=/%/include ^
-D PYTHON_LIBRARY=%PYTHONHOME:\=/%/libs/%PYVER%.lib ^
-D QT_LIBRARY_DIR=%O4W_ROOT%/lib ^
-D QT_HEADERS_DIR=%O4W_ROOT%/apps/qt5/include ^
-D CMAKE_INSTALL_PREFIX=%O4W_ROOT%/apps/%PACKAGENAME% ^
-D FCGI_INCLUDE_DIR=%O4W_ROOT%/include ^
-D FCGI_LIBRARY=%O4W_ROOT%/lib/libfcgi.lib ^
-D QCA_INCLUDE_DIR=%OSGEO4W_ROOT%\apps\Qt5\include\QtCrypto ^
-D QCA_LIBRARY=%OSGEO4W_ROOT%\apps\Qt5\lib\qca-qt5.lib ^
-D QSCINTILLA_LIBRARY=%OSGEO4W_ROOT%\apps\Qt5\lib\qscintilla2.lib ^
- 在OSGeo4W路径下创建批处理文件OSGeo4W-dev.bat和OSGeo4W-vs.bat
## OSGeo4W-dev.bat(初始化环境),添加内容如下:
@echo off
call F:\QGIS-final-3_16_3\ms-windows\osgeo4w\msvc-env.bat x86_64
@cmd
## OSGeo4W-vs.bat (初始化环境,并在环境下运行vs2017),添加内容如下:
@echo off
call F:\QGIS-final-3_16_3\ms-windows\osgeo4w\msvc-env.bat x86_64
call "E:\Microsoft Visual Studio\2017\Community\Common7\IDE\devenv.exe"
@cmd
配置
- 运行OSGeo4W-dev.bat初始化环境。
- 跳转到源码目录。
- 运行configonly.bat。
cd F:\QGIS-final-3_16_3\ms-windows\osgeo4w
configonly.bat

等待配置,若结果为completely,且在源码目录F:\QGIS-final-3_16_3\ms-windows\osgeo4w下生成了build-qgis-test-x86_64文件夹,则说明配置成功。
编译
- 运行OSGeo4W-vs.bat,初始化环境并在环境下运行vs2017。
- 打开qgis.sln,在F:\QGIS-final-3_16_3\ms-windows\osgeo4w\build-qgis-test-x86_64目录下。
- 在RelWithDebInfo模式下进行编译ALL_BUILD。
- 编译完成后调试qgis项目,运行成功,则编译完成。

QGIS源码编译步骤详解——官方新方案的更多相关文章
- linux http服务源码编译安装详解
相信大家大多都听过linux 的编译安装,但它到底是怎么把源代码变为自己电脑里可以应用的软件哪?今天,小编就以httpd 为例详细讲解一下. 什么是编译安装——编译:将源代码变为机器可执行的代码文件. ...
- apache源码编译安装详解
查看是否安装 rpm -qa httpd 如果已安装,则卸载:rpm -e 卸载 --nodeps 不考虑意外 下载 wget http://mirrors.sohu.c ...
- Android源码下载方法详解
转自:http://www.cnblogs.com/anakin/archive/2011/12/20/2295276.html Android源码下载方法详解 相信很多下载过内核的人都对这个很熟悉 ...
- 【转】ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
原文地址:http://blog.csdn.net/a396901990/article/details/36475213 简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量—— ...
- Spring Boot源码中模块详解
Spring Boot源码中模块详解 一.源码 spring boot2.1版本源码地址:https://github.com/spring-projects/spring-boot/tree/2.1 ...
- ANDROID自定义视图——onMeasure,MeasureSpec源码 流程 思路详解
简介: 在自定义view的时候,其实很简单,只需要知道3步骤: 1.测量--onMeasure():决定View的大小 2.布局--onLayout():决定View在ViewGroup中的位置 3. ...
- 【Java】HashMap源码分析——常用方法详解
上一篇介绍了HashMap的基本概念,这一篇着重介绍HasHMap中的一些常用方法:put()get()**resize()** 首先介绍resize()这个方法,在我看来这是HashMap中一个非常 ...
- React源码 commit阶段详解
转: React源码 commit阶段详解 点击进入React源码调试仓库. 当render阶段完成后,意味着在内存中构建的workInProgress树所有更新工作已经完成,这包括树中fiber节点 ...
- vue新手入门之使用vue框架搭建用户登录注册案例,手动搭建webpack+Vue项目(附源码,图文详解,亲测有效)
前言 本篇随笔主要写了手动搭建一个webpack+Vue项目,掌握相关loader的安装与使用,包括css-loader.style-loader.vue-loader.url-loader.sass ...
随机推荐
- 痞子衡嵌入式:恩智浦i.MX RTxxx系列MCU启动那些事(7)- 从SD/eMMC启动
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MXRTxxx系列MCU的SD/eMMC卡启动. 关于 i.MXRT 启动设备,痞子衡之前写过很多篇文章,都是关于串并行 NO ...
- 微信小程序下滑时能实现加载更多数据
wxml代码: <view class="scroll"> <!-- 绑订页面上拉触底事件的处理函数onReachBottom事件 --> <scro ...
- 【故障公告】没有龙卷风,k8s集群翻船3次,投用双集群恢复
今天没有龙卷风(异常的高并发请求),故障却依然出现,问题非常奇怪. 某种异常情况会造成短时间内, k8s 集群中大量 pod (超过60%)因健康检查失败而处于 CrashLoopBackOff 状态 ...
- Java学习笔记:04面向对象-内部类_访问修饰符_final
04面向对象-内部类/访问修饰符/final 1.static的介绍 static:关键字,静态的 static的作用是用来修饰类中的成员 2.访问一个类中的某一个成员变量 方法一: _1.创建对象 ...
- kkFileView对接svn服务完成文件在线预览功能
1.需求: 之前在公司内部搭建了svn服务器,给部门存放文档.视频,做成了一个文档服务器来用,随着视频文件太大,每次下载太慢 需要把文件在线打开查看 2.解决: kkFileView https:// ...
- vue中使用keepAlice的各种问题
项目需求:从项目列表页index,进入到列表的详情页detail,再从detail返回到index,需要缓存index的数据 在App.vue中的配置 <template> <div ...
- gdk-pixbuf tiff_image_parse函数整数溢出漏洞
受影响系统:gdk-pixbuf gdk-pixbuf 2.36.6描述:CVE(CAN) ID: CVE-2017-2870 gdk-pixbuf是一个用于以各种格式加载图像和像素缓冲处理的库. 使 ...
- Anaconda Navigator卡logo打不开闪退问题处理方案-更换阿里云镜像源
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 一.打开软件卡logo,点击图标后闪退 最近有同事使用anaconda时出现了卡logo,显示loading applications,点击图标时发 ...
- Linux 查看文件大小并按照大小排序
使用df 命令查看当前系统磁盘的使用情况: [root@node ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/map ...
- RabbitMQ Go客户端教程2——任务队列/工作队列
本文翻译自RabbitMQ官网的Go语言客户端系列教程,本文首发于我的个人博客:liwenzhou.com,教程共分为六篇,本文是第二篇--任务队列. 这些教程涵盖了使用RabbitMQ创建消息传递应 ...