【全網首發】使用vs2017+qt5.12.4編譯64位debug和release的qgis3.4.9


 

一、摘要:

搜索網絡沒有發現一篇文章完整的介紹如何編譯qgis3.4.x的debug版本,官方的指導也長時間不再更新。

所以前前后后花了4天搞定qgis的debug編譯,並成功運行,廢話不多說,直接上步驟。

二、需要准備的東西

1、cmake,一般下載最新的release版本即可,本文使用3.14.5

2、osgeo4w,qgis的依賴安裝工具,本文使用64位

3、vs2017,本文使用最新版本15.9.14

4、QGIS的源碼包,本文使用最新ltr版本3.4.9

5、cygwin,用來下載依賴工具,默認安裝最新版本即可

6、windows下的openssl,默認下載最新版本即可,本文使用1.1.1.c

7、qwt,本文使用最新的6.1.4

8、qtkeychain,本文使用最新的0.9.1

9、qca,本文使用最新的2.2.1

10、QScintilla,本文使用最新的2.11.2

11、ninja,本文使用最新的1.9.0

12、QT,本文使用最新的ltr版本5.12.4,我從國內清華大學的鏡像站下載。

13、Everything,用於后面編譯完成后快速找文件用。

三、步驟

1、安裝Win64OpenSSL-1_1_1c.exe、cmake、qt,根據需要選擇組件。

2、使用cygwin安裝flex、bison。

3、使用osgeo4w安裝(選擇Advanced install)qgis編譯需要的依賴:Proj、GEOS、GDAL、Expat、libspatialindex、SpatiaLite、LibZip、Sqlite3、python3、GSL。

4、解壓ninja的壓縮包,並把ninja.exe復制到osgeo4w的安裝路徑的bin目錄中(默認是C:\OSGeo4W64\bin),路徑可在第3步中修改,建議別改,后續的bat腳本會用到這個路徑。

5、qwt的編譯,看源碼目錄中的doc/html/qwtinstall.html即可。我的步驟如下:

1)解壓源碼
(2)啟動qt命令行模式(開始菜單有),然后調用vcvarsall.bat x64設置vs環境變量,vcvarsall.bat需要完整路徑
(3)如果有需要就修改qwtbuild.pri和qwtconfig.pri,否則略過,我沒修改。
(4)命令行下進入qwt源碼目錄,執行qmake qwt.pro
(5)執行nmake
(6)執行nmake install,程序被安裝到c盤根目錄(我的是C:\Qwt-6.1.4

6、qtkeychain的編譯

1)解壓源碼
(2)啟動qt命令行模式(開始菜單有),然后調用vcvarsall.bat x64設置vs環境變量
(3)執行cmake-gui
(4)在cmake進行Configure、Generate、Open Project,記得修改CMAKE_INSTALL_PREFIX為自定義的安裝目錄。
(5)打開工程后執行批生成ALL_BUILD,INSTALL

7、qca的編譯

1)解壓源碼
(2)啟動qt命令行模式(開始菜單有)
(3)執行cmake-gui
(4)在cmake進行Configure
(5)勾選DEVELOPER_MODE、去除BUILD_TESTS的勾選,在CMAKE_CXX_FLAGS加入 /MP;
(6)Generate、Open Project
(7)打開工程后執行批生成ALL_BUILD
(8)在自定義的安裝目錄中新建qca_2.2.1目錄,然后在編譯目錄中拷貝bin目錄,lib目錄到qca_2.2.1目錄,在源碼目錄拷貝include到qca_2.2.1目錄,用編譯目錄下的qca_version.h替換include目錄中的qca_version.in.h

8、QScintilla的編譯

1)解壓源碼
(2)進入源碼下的qt4qt5目錄
(3)執行qmake、nmake all、nmake install
(4)拷貝debug庫到安裝目錄,默認是在qt的安裝目錄中。

9、配置msvc-env.bat

$QGIS_PATH\ms-window\osgeo4w\msvc-env.bat中的
set VS140COMNTOOLS=%PF86%\Microsoft Visual Studio 14.0\Common7\Tools\
call "%PF86%\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" %VCARCH%
path %path%;%PF86%\Microsoft Visual Studio 14.0\VC\bin
為
set VS150COMNTOOLS=%PF86%\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\
call "%PF86%\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" %VCARCH%
path %path%;%PF86%\Microsoft Visual Studio\2017\Enterprise\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64

注釋GRASS7的內容,因為用不上,如果有需要請自行在osgeo4w中安裝:
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 "%GRASS7%"=="" (echo GRASS7 not found & goto error)
for /f "usebackq tokens=1" %%a in (`%GRASS7% --config path`) do set GRASS_PREFIX=%%a

 10、配置qt,在C:\OSGeo4W64\bin下添加qt.conf,qt5.conf,qt5_env.bat。qt5_env.bat文件內容根據實際情況進行修改,3個文件保存為utf-8格式。

qt.conf和qt5.conf內容:

[Paths]
Prefix=$(O4W_QT_PREFIX)
Binaries=$(O4W_QT_BINARIES)
Plugins=$(O4W_QT_PLUGINS)
Libraries=$(O4W_QT_LIBRARIES)
Translations=$(O4W_QT_TRANSLATIONS)
Headers=$(O4W_QT_HEADERS)
Documentation=$(O4W_QT_DOC)
qt5_env.bat內容:

@echo off
path C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/bin;%PATH%
set QT_PLUGIN_PATH=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/plugins
set O4W_QT_PREFIX=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64
set O4W_QT_BINARIES=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/bin
set O4W_QT_PLUGINS=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/plugins
set O4W_QT_LIBRARIES=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/lib
set O4W_QT_TRANSLATIONS=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/translations
set O4W_QT_HEADERS=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/include
set O4W_QT_DOC=C:/Qt/Qt5.12.4/5.12.4/msvc2017_64/doc

11、在osgeo4w的安裝路徑下新建bat文件,輸入:

@echo off
call $GIS_PATH\ms-window\osgeo4w\msvc-env.bat x86_64
@cmd

其中$GIS_PATH指qgis的源碼解壓目錄。

然后啟動vs2017開發者命令行,執行該bat文件,再執行cmake-gui

12、在cmake中配置qgis的源碼路徑,並新建build路徑用於存放生成的工程文件和編譯生成的文件。我的如下:

13、點擊cmake的Configure,第一次Configure不會成功,會有錯誤。具體需要修改的配置如下,然后重新Configure並修改錯誤。以下配置不是一次就能全部修改到,需要多次Configure。

1)在CMAKE_CXX_FLAGS后加入 /MP /utf-8,用來加快編譯速度和解決無法識別字符的問題。
(2)去除ENABLE_TESTS、WITH_BINDINGS、WITH_QTWEBKIT、WITH_GRASS7的勾選,如果需要TESTS工程,可以不去除,其他的必須去除,因為沒有安裝相關依賴,如果需要請自行研究或者關注我后續的教程。
(3)勾選WITH_CUSTOM_WIDGETS、WITH_QSPATIALITE;
(4)修改PYTHON_EXECUTABLE的路徑為C:\OSGeo4W64\apps\Python37\python.exe,此處必須進行修改,系統識別到的路徑在編譯的時候會報python的setlocal錯誤。
(5)設置配置項中Qwt、QCA、Qtkeychain的INCLUDE_DIR和LIBRARY路徑,需要注意的是QCA的INCLUDE_DIR一定要指到QtCrypto目錄,Qtkeychain的INCLUDE_DIR一定要指到qt5keychain目錄。
(6)如果需要定義QGIS的安裝路徑,請修改CMAKE_INSTALL_PREFIX。

14、Configure成功后,點擊cmake的Generate,我Configure成功后的截圖如下,請忽略OpenCL,其他都是一樣的。

15、點擊cmake的Open Project,修改工程的Debug配置下的lib庫的輸入,截圖如下,紅色框中的4個庫需要改成debug,截圖中我已經修改,請大家根據實際路徑和名稱進行修改,因為涉及修改工程配置,而如果在前面cmake配置時勾選了TESTS工程會多達130多個,不勾選只有50左右。

16、修改完成后即可進行編譯,建議使用vs的生成菜單下的批生成,具體選擇如下,ALL_BUILD選擇除Release外的3個:

INSTALL選擇Release,因為INSTALL也會進行編譯:

17、如果前面所有的安裝和配置沒有錯誤的話,此處編譯只是漫長的等待而已,一般都是4個小時,機器好時間會短些。

18、INSTALL完成后就能在安裝目錄看到如下內容,大家看到的只會比我的多,因為我刪掉了不需要的東西。:

我們需要關心的是bin,include,lib,plugins這4個目錄,默認現在這4個目錄中安裝的是release版本,那包括debug的其他3個版本的相關文件怎么來?所有需要的文件都在步驟11配置時設定的build路徑中。建議大家使用Everything這個軟件進行指定目錄搜索和這4個目錄中的同名文件就能看到了,至於怎么用就看各位自己的了,編譯教程到此結束。

 

PS:轉載請注明出處,本人保留相關權利。

參考鏈接:

1、https://blog.csdn.net/deirjie/article/details/72902343

2、https://blog.csdn.net/deirjie/article/details/63713033


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM