Як скомпілювати Qgis з можливістю зневадження під Windows

По роботі довелося зіткнуться з тим, що потрібно було дізнатися, які дії відбуваються в ядрі QGIS. QGIS (Quantum GIS) - вільна кроссплатформенна геоінформаційна система. Сама система розроблена за допомогою інструментарію Qt. Через нього я і вирішив зібрати проект. Для цього я скачав вихідці qgis з офіційного сайту і почав збірку. На самому сайті є керівництво зі складання за допомогою Qt Creator. Було прочитано багато статей про збирання і зневадження QGIS (деякі навіть розумні). Але ні в керівництві, ні на будь-яких ресурсах не знайшов вирішення тих проблем, з якими я зіткнувся. Так народилася ідея написати власне керівництво зі збирання QuantumGIS для Windows систем використовую Qt Creator.

Перш ніж збирати

Спочатку ми скачуємо і встановлюємо Qt Creator. Качаємо з офіційного сайту. Я використовував скомпільовані бібліотеки Qt. (Увага! Qgis офіційно не підтримує Qt 5. Краще використовуйте Qt 4): беремо звідси. Ставимо Microsoft Windows SDK for Windows 7 and .NET Framework 4 (ISO) (потрібен для setupapi)

Крім того, для зневадження Qt Creator необхідний CDB (з пакета MS Debugging Tools). знаходиться тут.

Так само скачуємо і встановлюємо:Cmake ,Flex и Bison. З офіційного сайту скачуємо OSGeo4W для своєї версії: тут. Запускам його і вибираємо: розширена установка - > встановити з інтернету і тиснемо все далі.

Виберіть такі бібліотеки: expat, fcgi, gdal, gdal-dev, iconv, PyQt4, Qt4-Devel, qwt-devel-Qt4, sip, curl, gsl, hdf5, proj, qScintilla2, Sqlite3, libspatialIndex-devel, geos, zlib. Чекаємо, коли встановиться.

Скачуємо вихідні Qgis.

Підготовка для збирання

Я припускаю, що у вас все вийшло. Встановили все що потрібно і завантажили вихідний код. Запустіть Qt Creator. Потім зробіть: Файл - > Відкрити файл або проект. Використовуйте це діалогове вікно, щоб відкрити файл CMakeLists.txt. Він знаходиться у вихідниках, у мене шлях такий: D:\qgis2.8.7\ CMakeLists.txt. Далі вам буде запропоновано створити місце збірки. Я створюю певний каталог: D:/Quantum-Gis.

Далі вам запропонують запустити Cmake параметри збірки. Ми запустимо його з наступними параметрами: -DCMAKE_BUILD_TYPE=Debug.

Після запуску Cmake ми вкажемо шлях до теки де лежать вихідники QGIS і шлях до теки, в яку запишеться конфігурація.

Після цього натиснемо «Configure» і виберемо компілятор «NMake Makefiles» і залишаємо позначку «Use default native compilers». Cmake перевірятиме налаштування і наявність потрібних компонентів (позначено червоним). Покажу свою конфігурацію.

BISON_EXECUTABLE C:/cygwin64/bin/bison.exe

CMAKE_INSTAL_PREFIX C:/Program Files/qgis2.8.7

EXPAT_INCLUDE_DIR C:/OSGeo4W64/include

EXPAT_LIBRARY C:/OSGeo4W64/lib/expat.lib

FLEX_EXECUTABLE C:/cygwin64/bin/flex.exe

GDAL_INCLUDE_DIR C:/OSGeo4W64/include

GDAL_LIBRARY C:/OSGeo4W64/lib/gdal_i.lib

GEOS_INCLUDE_DIR C:/OSGeo4W64/include

GEOS_LIBRARY C:/OSGeo4W64/lib/geos_c.lib

POSTGRESQL_INCLUDE_DIR C:/OSGeo4W64/include

POSTGRESQL_LIBRARY C:/OSGeo4W64/lib/libpq.lib

PROJ_INCLUDE_DIR C:/OSGeo4W64/include

PROJ_LIBRARY C:/OSGeo4W64/lib/proj.lib

PYRCC4_PROGRAM C:/OSGeo4W64/bin/pyrcc4.exe

PYTHON_INCLUDE_PATH C:/Python27/include

PYTHON_LIBRARY C:/Python27/libs/python27.lib;

PYUIC4_PROGRAM C:/OSGeo4W64/apps/Python27/Lib/site-packages/PyQt4/uic/pyuic.py

QSCINTILLA_INCLUDE_DIR C:/OSGeo4W64/include/qt4

QSCINTILLA_LIBRARY C:\OSGeo4W64\lib\qscintilla2.lib

QSCI_SIP_DIR C:\OSGeo4W64\include

QT_QMAKE_EXECUTABLE C:/Qt/qt-4.8.6-x64-msvc2010/qt-4.8.6-x64-msvc2010/bin/qmake.exe

QWT_INCLUDE_DIR C:/OSGeo4W64/include/qwt

QWT_LIBRARY C:/OSGeo4W64/lib/qwt5.lib

SETUPAPI_LIBRARY C:/Program Files (x86)/Windows Kits/8.1/Lib/winv6.3/um/x64/SetupAPI.Lib

SPATIALINDEX_INCLUDE_DIR C:/OSGeo4W64/include/spatialindex;C:/OSGeo4W64/include

SPATIALINDEX_LIBRARY C:/OSGeo4W64/lib/spatialindex-64.lib;C:/OSGeo4W64/lib/spatialite_i.lib;C:/OSGeo4W64/lib/spatialindex_c-64.lib

SPATIALLITE_INCLUDE_DIR C:/OSGeo4W64/libspatialite-4.3.0a/src/headers

SPATIALLITE_LIBRARY C:/OSGeo4W64/lib/spatialite.lib

SQLITE3_INCLUDE_DIR C:/OSGeo4W64/include

SQLITE3_LIBRARY C:/OSGeo4W64/sqlite3.lib

TXT2TAGS_EXECUTABLE TXT2TAGS_EXECUTABLE-NOTFOUND

Конфігурація повинна проходити без помилок. (Увага! На теці рекомендую встановити змінні середовища, інакше доведеться всі шляхи прописувати вручну). Після успішного налаштування натискаємо «Generate» і створюємо файли налаштувань. Далі закриваємо Cmake і повертаємося в Qt Creator. Натискаємо кнопку «Завершити».

Збирання проекту

Тепер що стосується самого проекту. Заходимо на вкладку «Проект». Вгорі розташовано кнопку керування. У відкритому вікні на вкладці «Збірка і запуск» - > «Основне» вказуємо каталог проектів, наприклад, D:\Quantum-GIS. На вкладці Текстовий редактор - > Поведінка кодувань файлів - > Типове значення windows-1251/ CP1251. Далі переходимо знову на вкладку «Збірка і запуск» - > «Компілятори» і переконуємося, що серед виявлених є хоча б деякі компілятори з нижче представлених.

На вкладці «Зневадники» (тут же) повинні бути ось ці зневадники (версії можуть відрізнятися).

Потім вибираємо вкладку Qt Versions, натискаємо кнопку «Додати» і вказуємо шлях до встановленої раніше бібліотеки Qt C:\Qt\4.8.6\bin\qmake.exe. У назву профілю прописуємо наприклад, Qt 4.8.6 MSVC2010 64bit.

Тепер можна зробити зв'язку інструментів. Переходимо на «Компоненти», натискаємо кнопку «Додати» і у властивостях нової зв'язки вказуємо компоненти. У мене вони такі:

(компілятор і зневадник у Вас можуть бути свої)

Закриваємо параметри, попередньо натиснувши кнопку «Застосувати». Проект готовий до складання. Щоб зібрати його потрібно натиснути внизу на значок молотка. Компіляція повинна проходити без помилок. Якщо помилок не потрібно скинути у створену теку, куди скомпілювалися файли QGIS, пов'язані бібліотеки:

expat.dll, freexl.dll, gdal200.dll, geos_c.dll, hdf5.dll, iconv.dll, jpeg.dll, jpeg12.dll, libcurl.dll, libpq.dll, libtiff.dll, libxml2.dll, ogdi.dll, proj.dll,qscintilla2.dll, QtCore4.dll, QtGui4.dll, QtNetwork4.dll, QtSql4.dll, QtSvg4.dll, qwt5.dll, QtXml4.dll, spatialindex-64.dll, spatialite.dll, sqlite3.dll, szip.dll, xerces-c_3_1.dll zlib.dll.

Всі бібліотеки знаходяться в теці C:\ OSGeo4W64\bin, бібліотеки Qt я підключав з бібліотек. Далі копіюємо теку C:\ OSGeo4W64\etc до теки з файлами QGIS, у моєму випадку: D:\ Quantum-GIS\output. Також копіюємо з C:\ OSGeo4W64\bin два батники qgis.bat і o4w_env.bat в директорію D:\ Quantum-GIS\output\bin. Повернемося до параметрів Qgis Qt cCreator. На вкладці «Проект» відкриваємо вкладку «Запуск». Вказуємо директорії, де лежить exe-файл QGIS і робочу директорію.

Якщо QGIS запустився, то тепер ви можете налагоджувати, натисканням кнопки з божою корівкою. Насолоджуйтеся.

Можливі помилки

1. Бібліотека Python. В офіційному керівництві зі складання qgis рекомендують вибирати встановлену в osge4w бібліотеку python27. У мене не вийшло зібрати з нею. Завантажив окрему бібліотеку python27 з офіційного сайту Python. Запрацювало.

2. Після встановлення Qt створіть змінне середовище QTDIR. Якщо цього не зробити будуть проблеми з бібліотеками Qt, проект так і не зможе їх знайти. (теж саме потрібно зробити і з Qt_MOC, QT_RCC, QT_UIC але у мене запрацювало без цього).

3. Проблеми з бібліотеками. Якщо ви збираєте програму в режимі випуску, а бібліотека в режимі зневадження, то виникнуть помилки. Переконайтеся, що і проект, і бібліотека однієї версії. (У мене таке було з бібліотекою qwt. Компілятор видавав QWidget: Must construct a QApplication before a QPaintDevice. Замінив версію бібліотеки - запрацювало).

Сподіваюся, що моя стаття буде корисною. Збирав Qgis версії 2.8.7 на Windows 7 x64-бітній системі.