參考鏈接:
https://blog.csdn.net/octdream/article/details/70332428
https://blog.csdn.net/quinta_2018_01_09/article/details/79084001
https://www.cnblogs.com/xiaojian1987/p/8342104.html
1.安裝QT
QT官網下載:http://download.qt.io/archive/qt/
我安裝的QT 版本是:qt-opensource-windows-x86-msvc2015_64-5.8.0.exe
2.安裝VS2015 與QT
參考鏈接: https://blog.csdn.net/lebusini/article/details/79901628
3.下載並安裝以下工具軟件
下載並安裝以下軟件包:
Tool | Website |
---|---|
CMake | https://cmake.org/files/v3.7/cmake-3.7.2-win64-x64.msi |
GNU flex, GNU bison and GIT | http://cygwin.com/setup-x86.exe (32bit) or http://cygwin.com/setup-x86_64.exe (64bit) |
OSGeo4W | http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86.exe (32bit) or http://download.osgeo.org/osgeo4w/osgeo4w-setup-x86_64.exe (64bit) |
ninja | https://github.com/ninja-build/ninja/releases/download/v1.7.2/ninja-win.zip |
OSGeo4W不僅爲當前的QGIS發行版提供了準備好的軟件包,而且還爲每個主機的夜間構建提供了可用的軟件包,同時也提供了構建它的大部分依賴關係。如果用戶要要編譯32位的QGIS請用32位的OSGeo4w下載,如果用戶要要編譯64位的QGIS請用64位的OSGeo4w。32位的在下載時會下載32位的依賴庫,64位的在下載時會下載64位的依賴庫。
對於QGIS構建,您需要從cygwin安裝以下軟件包:
- bison
- flex
- git
注:
- flex和 bison可以從cygwin下載,但是要注意32位還是64位,32位的在下載時會下載32位的,64位的在下載時會下載64位的。安裝地址不要帶空格和中文。也可以從我提供的以下的鏈接直接下載解壓:
- git可以不用下載,這個主要是用來下載QGIS源碼包的,下載QGIS源碼包我們要以從官網上下載。
qgis下載地址:https://qgis.org/downloads/
和OSGeo4W(選擇Advanced Installation):
下載地址選擇這個會快一些:
選擇以下組件安裝:
- expat
- fcgi
- gdal
- grass
- gsl-devel
- iconv
- libspatialindex-devel
- pyqt5
- python3-devel
- python3-qscintilla
- python3-nose2
- python3-future
- python3-pyyaml
- python3-mock
- qca-qt5-devel
- qca-qt5-libs
- qscintilla-qt5
- qt5-devel
- qt5-libs-debug
- qtwebkit-qt5-devel
- qtwebkit-qt5-libs-debug
- qwt-devel-qt5
- sip-qt5
- spatialite
- qjson-dev
- qjson-libs
這也可以選擇上述軟件包所依賴的軟件包。要注意的是,上述所有的軟件包或依賴不能有空格或中文。
4. 使用CMake設置並構建Visual Studio項目
要啓動具有VC ++和OSGeo4W變量的環境的命令提示符,將創建以下批處理文件(假定上述包安裝在默認位置):
set VS140COMNTOOLS = C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" amd64
set INCLUDE=%INCLUDE%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include
set LIB=%LIB%;C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib
set OSGEO4W_ROOT=C:\OSGeo4W64
call "%OSGEO4W_ROOT%\bin\o4w_env.bat"
call "%OSGEO4W_ROOT%\bin\py3_env.bat"
call "%OSGEO4W_ROOT%\bin\qt5_env.bat"
set O4W_ROOT=%OSGEO4W_ROOT:\=/%
set LIB_DIR=%O4W_ROOT%
path %path%;C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin
path %PATH%;C:\Program Files\CMake\bin;C:\cygwin64\bin
@set GRASS_PREFIX=C:/OSGeo4W64/apps/grass/grass-7.4.0
@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
@cmd
說明:上面的路徑要根據自己的實際情況,做適當地改變,特別是我紅色標註的地方,做好這一步後面會省去很多事情。(1)VS140COMNTOOLS表示VS15,call後續跟的X64表示64位編譯;(2)Include表示頭文件,這裏加了Win10系統的sdk;Lib表示編譯的動態庫;(3)Path表示環境變量;(4)特別注意:GRASS_PREFIX的路徑地址必須是“/”,Path路徑多個;之間不能有空格。
在某個地方創建一個“build”目錄。這將是生成所有構建輸出的位置。
找到CMake的安裝目錄,以管理員的方式運行"cmake-gui.exe",然後設置qgis源碼包的目錄和項目的構建目錄:
點擊“Configure ”啓動配置並選擇VisualStudio 14 2015/VisualStudio 14 2015 X64並保留本機編譯器,然後單擊完成。
“Configure ”過程中,可能會出現配置不正常的項目,如果某個依賴項沒有鏈接到,請手動選擇鏈接目錄。我出現的找不到的問題:
1.記得錯誤後勾選ENABLE_QT5選項,否則將會查找qt4
2.PYRCC_PROGRAM需手動查找,我的對應路徑:C:/OSGeo4W64/apps/Python36/Scripts/pyrcc5.bat
3.SPATIALINDEX_LIBRARY需手動查找,我的對應路徑:C:/OSGeo4W64/lib/spatialindex-64.lib
4.取消勾選WITH_QWTPOLAR選項,不需要
配置到“Configuring done",然後點擊“Generate" 生成VS2015的項目解決方案,直到“Generating done”,然後在項目目錄中打開qgis-x.y.z.sln文件。
在使用ALL_BUILD目標構建QGIS之前,將Debug中的解決方案配置更改爲RelWithDebInfo(發佈調試信息)或Release(否則需要不包括的調試庫)。
5. 編譯QGIS
1、將debug模式改爲ReWithdebInfo
2、移除不依賴的項目,保留依賴項目,將qgis設置爲啓動項
3、優先編譯qgis_core,此工程編譯通過後,再編譯其他的;
4、全部編譯後,生成的所有文件在Build->output->bin->RelWithDebInfo目錄下
6. 編譯問題
1.找不到 <netinet/in.h>,註釋掉即可
2. error C2001: newline in constant (主要是頁面不支持("′")("″")的符號)
解決方法:打開出現warning的文件,Ctrl+A全選,然後在文件菜單:file->advanced save options ,在彈出的選項中選擇新的編碼方式爲:UNICODE codepage 1200 ,點擊確定,問題就解決了。
3.編譯過程中proj.lib相關報錯,將名稱換成proj_i.lib即可;
4.error LNK2019 unresolved external symbol WinMain referenced in function xx qgis
解決方法:將qtmain.lib添加到附加依賴庫中,如圖所示:
5.此時會出現更種丟失dll的問題
解決方法:將兩個路徑加入到環境變量path中
6.此時打開exe文件仍然崩潰
解決方法:將OSGeo4W64\apps\Qt5\plugins文件下的platforms文件夾拷貝到剛纔的目錄即可,截圖如下:
4、再次啓動,成功。
打開項目中的測試數據,效果如下: