0 前言
1. 编译环境&&软件版本:
(1)Windows 10 64位 专业版
(2)Visual Studio Community 2022(社区版)
(3)CMake-3.28.0 64位
(4)Cygwin 64位
(5)OSGeo4W 64位
(6)Qt5.15.3-64位(通过OSGeo4W 下载)
(7)QGIS-3.28.15 源码
2. 关于QT:
本次编译使用的QT依赖项来源于OSGeo4W下载,读者也可以通过单独下载安装QT5.15.3,并完成相关配置,得到QT环境。
3. 关于OSGeo4W和Cygwin下载:
(1)安装OSGeo4W和Cygwin的过程相似,都会伴随依赖项的下载安装。
(2)凡是还没下载的依赖项,OSGeo4W和Cygwin中都需要选择install;对于已下载的依赖项,在OSGeo4W和Cygwin中都显示为keep,无需再下载。
(3)OSGeo4W和Cygwin中下载依赖项是增量式的,比如你已经安装了OSGeo4W和Cygwin,但是后期编译过程中发现少了东西(例如iconv、gdal等),可以重复OSGeo4W和Cygwin的安装过程,而已下载的依赖项不会被清除。
1 编译过程
1.1 软件准备
(1)操作系统:Windows 10 64位 专业版(旗舰版、家庭版等其他版本也可)
(2)其他软件下载及安装:
工具包 | 下载地址 |
QGIS 3.28.15源码 | Download QGIS |
CMake 3.28.0(64位) | Index of /files |
Cygwin(64位) | Cygwin Installation |
OSGeo4W (64位) | Download QGIS |
QT 5.15.3(64位) | 在OSGeo4W 中搜索qgis-dev-deps下载 |
?
?
?
?
?
Cygwin安装时要安装以下包:
- bison
-flex
-git(即使你的电脑上已经安装了git)
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
Visual Studio 2022(大于2019的版本即可)的安装省略,需要包含有c++模块。
1.2 配置环境变量
下载完成后,将Cygwin和OSGeo4W及其下载的依赖库添加到系统的环境变量。假设都装在D盘,则在系统变量Path里添加以下内容: D:cygwin64in;D:cygwin64lib;D:OSGeo4Win;D:OSGeo4Winclude;D:OSGeo4Wlib;
?
1.3 创建批处理脚本
1)新建一个start_compile.bat,右键-编辑,里面内容如下(批处理脚本中的具体路径取决于前面的安装位置):
@echo off set VS150COMNTOOLS=C:Program FilesMicrosoft Visual Studio2022CommunityCommon7Tools call "C:Program FilesMicrosoft Visual Studio2022CommunityVCAuxiliaryBuildvcvarsall.bat" x64 set INCLUDE=%INCLUDE%;C:Program Files (x86)Windows Kits10Include set LIB=%LIB%;C:Program Files (x86)Windows Kits10Lib set OSGEO4W_ROOT=D:OSGeo4W call "%OSGEO4W_ROOT%ino4w_env.bat" SET PYTHONHOME=%OSGEO4W_ROOT%appsPython39 SET PYTHONPATH=%PYTHONHOME%;%PYTHONHOME%Scripts set PYTHON_EXECUTABLE=%PYTHONHOME%/python3.exe PATH %PYTHONPATH%;%PATH% path %OSGEO4W_ROOT%appsQt5in;%PATH% set QT_PLUGIN_PATH=%OSGEO4W_ROOT%appsQt5plugins set O4W_QT_PREFIX=%OSGEO4W_ROOT:=/%/apps/Qt5 set O4W_QT_BINARIES=%OSGEO4W_ROOT:=/%/apps/Qt5/bin set O4W_QT_PLUGINS=%OSGEO4W_ROOT:=/%/apps/Qt5/plugins set O4W_QT_LIBRARIES=%OSGEO4W_ROOT:=/%/apps/Qt5/lib set O4W_QT_TRANSLATIONS=%OSGEO4W_ROOT:=/%/apps/Qt5/translations set O4W_QT_HEADERS=%OSGEO4W_ROOT:=/%/apps/Qt5/include set O4W_QT_DOC=%OSGEO4W_ROOT:=/%/apps/Qt5/doc set O4W_ROOT=%OSGEO4W_ROOT:=/% set LIB_DIR=%O4W_ROOT% path %path%;C:Program FilesMicrosoft Visual Studio2022CommunityVCToolsMSVC14.32.31326inHostx64x64 path %PATH%;D:OSGeo4WappsQt5in;D:cygwin64in @set GRASS_PREFIX=D:OSGeo4Wappsgrassgrass83 @set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%include @set LIB=%LIB%;%OSGEO4W_ROOT%lib;%OSGEO4W_ROOT%lib set LIB=%LIB%;%OSGEO4W_ROOT%appsQt5lib;%OSGEO4W_ROOT%lib set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%appsQt5include;%OSGEO4W_ROOT%include call "D:CMakeincmake-gui.exe"
2)以管理员身份启动cmd命令行,切换到上述start_compile.bat路径下,回车运行start_compile.bat,如图所示:
3)弹出CMake的图形化界面。
2 编译QGIS
1)“Where is the source code”一栏选择QGIS源码文件夹,“Where to build the binaries”一栏选择生成vs工程的目标路径。
2)点击“Configure”,在弹出对话框选择“Visual Studio 17 2022”,点击“finish”。
3)如果前面的配置没有问题,configure将顺利完成;笔者遇到一个报错,提示没找到gdal,解决方案是手动配置gdal的头文件和lib库路径,然后继续点击“configure”即可,如下图所示:
4)接下来笔者又遇到一个报错,提示没找到Python的开发包,如下图所示。解决方案是取消勾选“WITH_BINDINGS”和“BUILD_TESTING”,其他不变,再次点击“configure”,不再报错,如下图所示:
5)点击“Generate”,如果前面的配置没有问题,generate将顺利完成。
6)点击“Open Project”,打开生成的VS工程,可以看到一共有432个工程,如下图所示:
7)编译模式选择“RelWithDebInfo”,如下图所示:
8)将qgis设置为启动项。
9)将“D:cygwin64in”、“D:OSGeo4Win”、“D:OSGeo4Wappsgdal-devin”和“D:OSGeo4WappsQt5in”路径下所有dll文件,拷贝到“%构建目录%outputinRelWithDebInfo”下,即“qgis.exe”所在目录下。其中,%构建目录%是指CMake的“Where to build the binaries”指向的目录。
10)点击“本地Windows调试器”,VS自动进行qgis的编译,等待qgis编译完成(编译链接打包耗时约一个半小时),QGIS正常启动,证明QGIS源码编译成功。