玩转地理信息和实景三维,玩转qgis是一条捷径,而且几乎是无法回避的过程。所以下定决心,自己首先编译通过qgis。
下载源代码
已经下载qgis-3.34.8
源代码的文件体系如下图:
百度搜索qgis编译,得到博文 QGIS在Windows下的编译——QGIS3.28.15 + Qt5.15.3 +CMake…
感觉该文时间较近,值得参考,决定按该博文的指导一步步实现。首先感谢博文的作者。成功大多建立在巨人的肩膀上,希望原博文作者能是我这个小小目的的巨人!
博文中说准备和我的实现有:
- 编译环境&&软件版本:
(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 下载)有5.12源码,64位,说明是编译好的库
(7)QGIS-3.28.15 源码 就用我现在的
Visual Studio Community 2022(社区版)下载安装较简单,我选择了所以组件,大约需要46G空间 ,下载速度还可以,7M\S.
下载 cmake-3.30.2-windows-x86_64.msi并安装,顺利
下载Cygwin 64位
手动添加站点,一定添加cygwin目录,如下图
安装bison、flex、git,参照说明可以安装完毕。
OSGeo4W 64位,按照指导无法安装。因为:
原因不明。可以用浏览器打开setup.ini文件,就是这个installer无法安装。
换了同事的电脑,下载成功。看来,我的电脑网络配置哪里有些问题,一时搞不清楚。
源码顺手下了3.34.8
配置环境变量很重要。我的环境变量配置文件start_compile.bat:
@echo off
set VS150COMNTOOLS=C:\Program Files\Microsoft Visual Studio\2022\Community\Common7\Tools\
call "C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build\vcvarsall.bat" x64
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Windows Kits\10\Include
set LIB=%LIB%;C:\Program Files (x86)\Windows Kits\10\Lib
set OSGEO4W_ROOT=D:\envqgis\OSGeo4W
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
SET PYTHONHOME=%OSGEO4W_ROOT%\apps\Python312
SET PYTHONPATH=%PYTHONHOME%;%PYTHONHOME%\Scripts
set PYTHON_EXECUTABLE=%PYTHONHOME%/python3.exe
PATH %PYTHONPATH%;%PATH%
path %OSGEO4W_ROOT%\apps\Qt5\bin;%PATH%
set QT_PLUGIN_PATH=%OSGEO4W_ROOT%\apps\Qt5\plugins
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 Files\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.32.31326\bin\Hostx64\x64
path %PATH%;D:\envqgis\OSGeo4W\apps\Qt5\bin;D:\envqgis\cygwin64\bin
@set GRASS_PREFIX=D:\envqgis\OSGeo4W\apps\grass\grass83
@set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\include
@set LIB=%LIB%;%OSGEO4W_ROOT%\lib;%OSGEO4W_ROOT%\lib
set LIB=%LIB%;%OSGEO4W_ROOT%\apps\Qt5\lib;%OSGEO4W_ROOT%\lib
set INCLUDE=%INCLUDE%;%OSGEO4W_ROOT%\apps\Qt5\include;%OSGEO4W_ROOT%\include
call "D:\envqgis\cmake\bin\cmake-gui.exe"
编译的文件结构:
cmd运行start_compile.bat
cmake填好源代码和构建目录:
点击configure按钮:
有警告:
CMake Warning at cmake/FindProj.cmake:21 (find_package):
Found package configuration file:
D:/envqgis/OSGeo4W/lib/cmake/proj/proj-config.cmake
but it set PROJ_FOUND to FALSE so package “PROJ” is considered to be NOT
FOUND. Reason given by package:
PROJ could not be found because dependency SQLite3 could not be found.
Call Stack (most recent call first):
CMakeLists.txt:361 (find_package)
没有处理,不知道会不会影响使用;期间,遇到不少问题,经过仔细检查才得到这个configure结果。
点击Generate按钮,生产解决方案(如果configure过程有错误,这个按钮不可用)
点击openproj,打开工程
需要全部构建(ALL_BUILD作为启动项)
构建后把将“D:\envqgis\cygwin64\bin”、“D:\envqgis\OSGeo4W\bin”、“D:\envqgis\OSGeo4W\apps\gdal-dev\bin”和“D:\envqgis\OSGeo4W\apps\Qt5\bin”路径下所有dll文件,拷贝到“qgis.exe”所在目录下。其中,%构建目录%是指CMake的“Where to build the binaries”指向的目录。
双击qgis.exe运行,如发现缺少的文件,需要补上。
运行后删除所有文件,运行中需要的保留,多余的就删除了。我最终的文件:
可以运行了!
很多问题没怎么搞明白。