Архив за месяц: Август 2014

Установка бесплатных средств разработки для C++ под Windows. Qt(QMake/CMake) + MinGW

Вернуться к общему содержанию "Инструментальные средства программиста".

Дата написания статьи: 2014-08-11
Дата последней правки: 2014-08-13

Введение

Установка средств разработки Qt на Windows может сопровождаться рядом сложностей, которые могут оказаться непреодолимыми для новичков, не знающих некоторые особенности использования Qt и тех средств инсталляции, которые можно найти на различных ресурсах Интернет.

Прежде всего, следует знать, что, для разных платформ, Qt распространяется на основе разных лицензий. Под Windows, на текущий момент, предлагаются как платная, так и бесплатная лицензия. После того, как компания Nokia продала в компанию Digia права на разработку платформы Qt (компания Nokia занималась разработкой Qt с 2008 по 2012 годы), бесплатная ветка Qt существенно обособилась и стала выставляться с отдельного ресурса. Сейчас, с целью предоставления клиентам наиболее полной информации о различных вариантах использования продукта, планируется объединение ресурсов, предоставляющих платные и бесплатные средства Qt. Кроме того, планируется объединение средств инсталляции для пакетов с разными лицензиями. Выпуск первого такого инсталлятора планируется на сентябрь 2014 года.

Все нововведения будут относиться к версии Qt5, в то время как версия Qt4 уже давно не интересует производителей и именно с ней, для некомерческих предложений, и существует ряд проблем установки под Windows.

В традициях, для версии Qt4, библиотека поставлялась в виде наборов, которые могли содержать, в разных комбинациях, следующие средства.

  1. Qt SDK — заголовочные файлы, динамические библиотеки, утилиты — все, что необходимо для сборки традиционных Qt-проектов, исключая сам компилятор.
  2. Источники Qt SDK. Как правило, источники содержали более полный набор элементов Qt SDK, которые можно было опционально скомпилировать.
  3. Среда разработки QtCreator. На сегодняшний день, данная бесплатная среда разработки является, на мой взгляд, лучшим выбором при разработке проектов на языке C/C++.
  4. Средства MinGW (Minimalist GNU for Windows). Включают в себя GNU компилятор для C++, утилиту сборки GNU make и прочий набор инструментов, необходимых для компиляции проектов с некоторого набора языков, включающих в себя языки C/C++.

К сожалению, не всегда в обозначение инсталлятора входят содержащиеся в нем средства. Именно это может смутить новичков, особенно, при невнимательном использовании инсталлятора. Обозначенные в инсталляторе средства могут указывать на его зависимость от этих средств. Так, например, если у инсталлятора стоит пометка (VS 2010), то многим понятно, что в этом инсталляторе содержатся средства для разработки в связке с Microsoft Visual Studio 2010, которая должна быть предварительно установлена. Однако, если у инсталлятора стоит пометка (MinGW 4.8.2), то, так как инструментарий MinGW распространяется свободно, то не очевидно, содержится в этом инсталляторе MinGW или нет. И действительно, есть инсталляторы, которые содержат и которые не содержат внутри себя MinGW. В последних, на одной из страниц визарда, может стоять ссылка на скачивание и установку MinGW, которая может оказаться устаревшей. Так, если зайти на оригинальный ресурс, Qt-Project, где официально предлагается для скачивания Qt4 SDK с бесплатной лицензией, то мы столкнемся с отсутствием средств MinGW в соответствующем инстялляторе для версии Qt4. Фактически, с официального ресурса мы установим нерабочие средства разработки, если сами не доработаем их до требуемого состояния.

Системы сборки QMake и CMake

Традиционно, проекты Qt поддерживаются нативной системой сборки QMake, которая поставляется со всеми дистрибутивами, однако, из-за ряда проблем, связанных с использованием QMake, разработчики, работающие с Qt, все чаще используют систему сборки CMake, которая не содержит проблем QMake и формирует информативную сборку (с отображением процента исполнения), что очень удобно для больших проектов, сборка которых может занять значительное время (особенно при сборке на виртуальных компьютерах).

Инструменты компиляции — MinGW и средства от Microsoft

Система фреймворков и библиотек классов Qt поддерживает две системы компиляции:

  1. Инструменты из коллекции компиляторов GNU и GNU Binutils
  2. Инструменты компиляции для языка C++ от Microsoft

Средства разработки GNU для платформы Windows, можно получить в пакете, который называется MinGW (Minimalist GNU for Windows). Сегодня, согласно оригинальному ресурсу предоставляющему MinGW, в пакет входят следующие портированные компоненты.

  1. Коллекция компиляторов GNU Compiler Collection (GCC), включая компиляторы с языков C, C++, Objective-C, ADA и Fortran.
  2. Утилиты GNU Binutils для Windows (ассемблер, линковщик, менеджер архивов).
  3. Инструментальные утилиты, упрощающие работу с командной строкой — MSYS.
  4. Инсталлятор, в виде графического менеджера, управляющего составом установленных инструментов.

Использование средств разработки от Microsoft для проектов Qt, предполагает установленную среду разработки Microsoft Visual Studio со средствами компиляции с языка C++. Если нет специального требования на использование компиляторов Microsoft, то удобно будет воспользоваться бесплатными средствами разработки. При выборе инсталлятора средств разработки Qt, обратите внимание на тип компилятора, для которого они предназначены.

Добавление путей к системной переменной PATH

При выполнении установки требуемых средств разработки, указанных ниже, может понадобиться добавление путей на директории установки этих средств к значению системной переменной PATH. Это можно выполнить следующим образом.

  1. Нажмите комбинацию клавиш Windows+Pause. Откроется окно "Панель управления->Система и безопасность->Система".
  2. В панели слева выберите пункт "Дополнительные параметры системы". Откроется окно "Свойства системы". На вкладке "Дополнительно", внизу, щелкните кнопку "Переменные среды". В открывшемся окне, в группе "Системные переменные" выберите системную переменную PATH и щелкните по кнопке "Изменить".
  3. Значение системной переменной PATH состоит из списка путей разделенных знаком точка с запятой. Чтобы добавить нужный путь, вставьте в конец списка символ точки с запятой и запишите после него требуемый путь.
  4. Закройте все окна панели управления и перегрузите приложения, которые должны получить обновленные записи путей.

Последовательность шагов

Устанавка Windows 7
В моем случае, на виртуальном компьютере VirtualBox, была установлена Windows 7 Ultimate (x64). Кроме того, так как я не представляю себе работу с Windows без Firefox и Far Manager, то, сразу после установки Windows, мною были установлены эти два бесплатных продукта. Скорее всего, эти, приятные для меня программы, никак не должны повлиять на успех дальнейших мероприятий, однако, точности ради, я упоминаю об этих дополнительных инсталляциях, проведенных в моем случае. Конкретно, были установлены Firefox v. 31 и Far Manager v. 3.0 betta 4040 (x64).
Установка CMake
В моем случае, была установлена версия 3.0. Во время инсталляции была выбрана опция добавления CMake в пути Windows. В противном случае, это придется сделать самостоятельно. Вообще, путь на CMake можно не прописывать. В этом случае, при ручной работе, понадобится указывать полный путь до файла cmake.exe, а в случае работы из под какой-нибудь среды разработки, поддерживающей систему сборки CMake, понадобится из среды выполнить настройку запуска CMake.
Установка MinGW
Установим бесплатные средства компиляции, распространяемые под лицензице GNU. Как минимум, нам необходимо установить средства для компиляции с языка C++. Если необходимо использовать MinGW непосредственно из командной строки, не пользуясь возможностями сред разработки, типа QtCreator, то понадобиться указать путь на директорию bin установки MinWG. В моем случае, я указал путь C:\MinGW\bin. Использование в командной строке полного пути к утилитам MinGW не всегда приведет к успеху, так как из одной утилиты может понадобиться вызов другой. Так, например, утилита сборки mingw32-make вызывает при исполнении сценария сборки компилятор g++ при компиляции файлов с языка C++.
Установка Qt SDK
На странице http://qt-project.org/downloads по-умолчанию, предлагается скачивание последних версий Qt и среды разработки. Однако, внизу страницы, надо поискать средства для открытия информации по скачиванию более ранних версий Qt. На момент написания этих строк, я нашел внизу страницы кнопку "Show downloands" щелчок по которой открыл мне доступ к скачиванию "Qt libraries 4.8.6 for Windows (MinGW 4.8.2, 328MB)".

Использование данного инсталлятора отличается простотой, в том плане, что не требуется пользовательская установка со сложным выбором средств, которые требуются для конечной работы. К сожалению, устанавливая Qt для Windows я сталкивался с инсталляторами, которые содержат ошибки в зависимостях установки опций, и которые решаются установкой совершенно нелогичных флажков). В данной версии инсталлятора следует заметить только одну особенность. Он не содержит в себе MinGW в явном виде, и, вместо этого, на последней странице, перед запуском установки, сообщает о том, что для его работы нужен установленный MinGW и просит указать директорию его установки. Также, он предлагает ссылку, по которой можно попробовать установить MinGW, но, с учетом того, что инсталлятор Qt4 уже довольно старинный артефакт, а ссылки на ресурсы Интернет, могут меняться, то лучше подготовить установку MinGW предварительно, как мы и сделали на предыдущем шаге.

Если мы будем использовать сборку из командной строки, не используя средств разработки, то следует добавить путь на QtSDK в системную переменную PATH. Так же, это может потребоваться для работы CMake при наличии нескольких установленных версий Qt SDK. При наличии нескольких установленных версий Qt SDK в системных путях должен быть путь только на одну из версий — таким образом можно будет выполнять переключение используемых версий вне возможностей сред разработки, которые под каждую настроенную сборку автоматически формируют набор переменных окружения с требуемыми значениями.

Каждая из установок Qt SDK характеризуется &quuot;своим" экземпляром утилиты qmake.exe. Именно она знает где лежит все то, что необходимо для сборки проекта под данную версию Qt. Поэтому, путь на Qt SDK характеризуется путем на размещение ее экземпляра qmake.exe. В моем случае, это был путь C:\Qt\4.8.6\bin.

Проверка установленных инструментов

Создайте отдельную директорию. Например, директорию test. В этой директории создайте файл main.cpp со следующим содержимым.

#include <QApplication>
#include <QWidget>

int main(int argc, char* argv[])
{
    QApplication a(argc, argv);
    QWidget wgt;

    wgt.show();
    return a.exec();
}

Это код простейшей бесполезной оконной программы на Qt. После компиляции этого кода мы получим приложение, представляющееся на экране пустым окном с системными кнопками — свернуть, развернуть и закрыть.

Далее, продемонстрируем сборку данной программы средствами QMake и CMake. Пример является минимальным и совершенно корректным с точки зрения Qt4, поэтому любая ошибка в его сборке, фактически будет указывать на отсутствие того или иного инструмента. Чаще всего это будет означать отсутствие путей на инструмент или неправильную запись этого пути. Так же помните, что после редактирования системной переменной PATH требуется перезапустить приложение, в котором вы собираетесь использовать изменение значения системной переменной. Именно при запуске приложения формируется его окружение (environment) из текущих значений всех системных переменных операционной системы. Исключение из такого поведения я встречал только в Mac OS X.

Сборка с использованием QMake

Система сборки QMake является нативной для сборки Qt-проектов, поэтому пользоваться qmake очень просто. Она самостоятельно может создать файла проекта и сгенерировать по этому проектному файлу сценарий сборки под текущую конфигурацию вычислительно системы.

Откройте в директории нашего простейшего проекта консоль и выполните следующий набор команд. Знак ‘>’ является знаком приглашения к вводу команд в консоли Windows.

  > qmake -project
  > qmake
  > mingw32-make

Команда "qmake -project" выполненная в директории с файлами проекта выполняет анализ файлов источников и на их основе формирует проектный файл для системы сборки QMake. Файл проекта QMake имеет расширение "pro". Имя файла будет совпадать с именем директории проекта. В нашем случае, это будет файл test.pro.

Следующая команда "qmake" выполняет формирование сценария сборки для утилиты "make" на основе проектного файла, созданного предыдущей командой. После ее выполнения будет сформирован файл сценария "Makefile".

Далее, команда "mingw32-make", выполняет созданный на предыдущем шаге сценарий из файла "Makefile". Результатом выполнения созданного сценария будет исполняемый файл test.exe созданный в поддиректории debug. При запуске данного файла должно будет открыться пустое окно приложения.

Сборка с использованием CMake

Система сборки CMake, к сожалению, не является такой автоматизированной, как QMake, но обладает, тем не менее, рядом преимуществ.

Проектный файл системы CMake для любого проекта носит фиксированное название CMakeLists.txt. Для нашего простого проекта его придется писать самому. Создайте в директории с файлом main.cpp файл CMakeLists.txt и заполните его следующим содержимым. Строки, начинающиеся со знака решетки (комментарии) можно не писать.

cmake_minimum_required(VERSION 2.6)

set (PROJECT Test2)
project (${PROJECT})

# Тип сборки. Доступны следующие варианты значений:
# DEBUG | RELEASE | RELWITHDEBINFO | MINSIZEREL
set( CMAKE_BUILD_TYPE RELEASE )

# Подключение к сборке Qt4
find_package(Qt4 COMPONENTS QtCore QtGui REQUIRED)
include (${QT_USE_FILE})
ADD_DEFINITIONS(${QT_DEFINITIONS})

add_executable (${PROJECT} main.cpp )
target_link_libraries (${PROJECT} ${QT_LIBRARIES})

Чтобы не засорять текущую директорию множественными файлами с побочными продуктами компиляции, создадим отдельную директорию build для выполнения компиляции. Директория build должна содержаться в той же директории, что и файл проекта CMakeLists.txt. Зайдем в созданную директорию build и выполним в ней следующую команду cmake.

  > cmake -G "MinGW Makefiles" ..

Ключ -G используется для указания генератора, который должен быть использован для создания сценария сборки. CMake поддерживает большое количество разных генераторов, которые могут быть использованы для создания сценариев сборки под различные известные среды разработки на разных платформах. В том числе, C++ Builder, MS Visual Studio, Eclipse и пр. По умолчанию, для разных платформ предлагаются разные генераторы. Если запустить cmake под *nix, то генератором по-умолчанию будет генератор с именем "Unix Makefiles", который формирует сценарий сборки для утилиты GNU make. Если запустить cmake.exe под Windows, то генератором по-умолчанию будет генератор "NMake Makefiles", формирующий сценарий сборки под утилиту nmake, входящей в состав инструментов сборки от Microsoft. Так как нам нужно создать сценарий сборки под средства, предоставляемые системой MinGW, то необходимо указать соответствующий генератор.

Следующим параметром запуска утилиты, является параметр, обозначаемый в виде двух точек. Этот значок является синонимом родительской директории, пришедшей в современный Windows из *nix через DOS. В утилиту cmake.exe следует передать директорию с файлом проекта, а в нашем случае, для сборки в директории build, такой директорией будет родительская директория.

В результате выполнения этой команды будет создан файл сценария Makefile, который, как и в случае с использованием QMake, можно будет выполнить командой mingw32-make.