QGIS源码编译步骤详解——官方新方案
阅读原文时间:2022年04月03日阅读:10

目录


  方案详细可见源码文件中INSTALL.md。

源码下载

  QGIS源码下载:https://github.com/qgis/QGIS/releases

  建议3.16版本,本文源码版本3.16.3。

  3.22版本编译后会出现大量关于inline的错误,暂时不知如何解决。

环境下载

  1. 下载Cygwin64安装包,setup-x86_64.exe

  2. 安装Cygwin64,并安装Flex、Bison。

    Flex >= 2.5.6

    Bison >= 2.4

  3. 下载OSGeo4W安装包,setup-x86_64.exe

  4. 安装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

  5. 下载安装CMake。https://cmake.org/download/

    本文Cmake3.22.3

  6. 下载安装Visual Studio

    2017。https://visualstudio.microsoft.com/zh-hans/downloads/

  7. 安装C++桌面开发组件。除默认的以外,还需安装Windows 10 SDK(10.0.14393.0) ,会用到SetupAPI.Lib。

      注:建议Visual Studio 2017。Visual Studio 2015可能会出现fatal error C1001: 编译器中发生内部错误。

环境配置

  1. 移动到源码文件的的F:\QGIS-final-3_16_3\ms-windows\osgeo4w目录下。

  2. 打开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

  3. 打开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 ^
  4. 在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

配置

  1. 运行OSGeo4W-dev.bat初始化环境。

  2. 跳转到源码目录。

  3. 运行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文件夹,则说明配置成功。

编译

  1. 运行OSGeo4W-vs.bat,初始化环境并在环境下运行vs2017。

  2. 打开qgis.sln,在F:\QGIS-final-3_16_3\ms-windows\osgeo4w\build-qgis-test-x86_64目录下。

  3. 在RelWithDebInfo模式下进行编译ALL_BUILD。

  4. 编译完成后调试qgis项目,运行成功,则编译完成。

手机扫一扫

移动阅读更方便

阿里云服务器
腾讯云服务器
七牛云服务器

你可能感兴趣的文章