По работе пришлось столкнутся с тем, что нужно было узнать, какие действия происходят в ядре 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:OSGeo4W64libqscintilla2.lib
QSCI_SIP_DIR C:OSGeo4W64include
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:Qt4.8.6binqmake.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:OSGeo4W64bin, библиотеки Qt я подключал из скомпилированных библиотек. Далее копируем папку C:OSGeo4W64etc в папку с скомпилированными файлами QGIS, в моем случае: D: Quantum-GISoutput. Также копируем из C:OSGeo4W64bin два батника qgis.bat и o4w_env.bat в директорию D: Quantum-GISoutputbin. Вернемся к настройкам запуска 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-битной системе.
Автор: Klass