Руководство FreeBSD по созданию портов
Пред. | Глава 6. Особые соглашения | След.

# 6.9. Использование Qt

## 6.9.1. Порты, для которых требуется Qt

Таблица 6-7. Переменные для портов, использующих Qt

`USE_QT_VER` | Порт использует инструментальный пакет Qt. Возможными значениями являются `3` и `4`, каждая из которых указывает на старший номер используемой версии Qt. Соответствующие параметры передаются в сценарий `configure` и `make`.
`QT_PREFIX` | Устанавливается в значение, содержащее путь к установленному Qt (переменная только для чтения).
`MOC` | Устанавливается в значение, содержащее путь к `moc` (переменная только для чтения). По умолчанию устанавливается в соответствии со значением `USE_QT_VER`.
`QTCPPFLAGS` | Дополнительные флаги компилятора для инструментального пакета Qt, передаваемые через переменную `CONFIGURE_ENV`. По умолчанию устанавливается в соответствии со значением `USE_QT_VER`.
`QTCFGLIBS` | Дополнительные флаги компоновки для инструментального пакета Qt, передаваемые через переменную `CONFIGURE_ENV`. По умолчанию устанавливается в соответствии со значением `USE_QT_VER`.
`QTNONSTANDARD` | Подавляет изменение `CONFIGURE_ENV`, `CONFIGURE_ARGS`, `CPPFLAGS` и `MAKE_ENV`.

Таблица 6-8. Дополнительные переменные для портов, использующих Qt 4.x

`QT_COMPONENTS` | Указывает инструменты и библиотеки в качестве зависимостей для Qt 4. Смотрите подробнее ниже.
`UIC` | Устанавливает путь к `uic` (переменная только для чтения).
`QMAKE` | Устанавливает путь к `qmake` (переменная только для чтения).
`QMAKESPEC` | Устанавливает путь к конфигурационному файлу для `qmake` (переменная только для чтения).

При установленной переменной `USE_QT_VER` сценарию `configure` можно передавать некоторые полезные настройки:

    CONFIGURE_ARGS+= --with-qt-includes=${QT_PREFIX}/include \
                     --with-qt-libraries=${QT_PREFIX}/lib \
                     --with-extra-libs=${LOCALBASE}/lib \
                     --with-extra-includes=${LOCALBASE}/include
    CONFIGURE_ENV+=  MOC="${MOC}" LIBS="${QTCFGLIBS}" \
                     QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}"
    CPPFLAGS+=       ${QTCPPFLAGS}

Если переменная `USE_QT_VER` установлена в значение `4`, то также разворачиваются следующие настройки:

    CONFIGURE_ENV+= UIC="${UIC}" QMAKE="${QMAKE}" QMAKESPEC="${QMAKESPEC}"
    MAKE_ENV+=      QMAKESPEC="${QMAKESPEC}"

## 6.9.2. Выбор компонентов (только для Qt 4.x)

Если `USE_QT_VER` установлена в значение `4`, то в переменной `QT_COMPONENTS` можно указать зависимость от отдельных инструментов и библиотек Qt 4. К каждому компоненту можно добавить суффикс, `_build` или `_run`, отражающий, когда должна быть применена зависимость, во время сборки или выполнения, соответственно. Если суффикс отсутствует, зависимость от компонента будет и для времени сборки, и для времени выполнения. Обычно, компоненты библиотек должны указываться без суффиксов, компоненты инструментов - с суффиксом `_build`, а компоненты плагинов - с суффиксом `_run`. Наиболее общие используемые компоненты перечислены ниже (все доступные компоненты перечислены в `_QT_COMPONENTS_ALL` в файле `/usr/ports/Mk/bsd.qt.mk`):

Таблица 6-9. Доступные библиотечные компоненты Qt 4

Название | Описание
--- | ---
`corelib` | основная библиотека (можно опустить, если порт не использует ничего, кроме `corelib`)
`gui` | библиотека графического пользовательского интерфейса
`network` | сетевая библиотека
`opengl` | библиотека OpenGL
`qt3support` | библиотека совместимости с Qt 3
`qtestlib` | библиотека модульного тестирования
`script` | библиотека сценариев
`sql` | библиотека SQL
`xml` | библиотека XML

Вы можете определить, от каких библиотек зависит приложение, запустив `ldd` на основной исполняемый файл после успешной компиляции.

Таблица 6-10. Доступные компоненты инструментов Qt 4

Название | Описание
--- | ---
`moc` | мета-объектный компилятор (нужен при построении почти для каждого приложения Qt)
`qmake` | генератор Makefile / утилита построения
`rcc` | компилятор ресурсов (нужен, если приложение идет вместе с файлами `*.rc` или `*.qrc`)
`uic` | компилятор пользовательского интерфейса (нужен, если приложение идет вместе с файлами `*.ui`, созданными при помощи Qt Designer, - на практике каждое приложение Qt с GUI)

Таблица 6-11. Доступные компоненты плагинов Qt 4

Название | Описание
--- | ---
`iconengines` | плагин для движка иконок SVG (если приложение поставляется с иконками SVG)
`imageformats` | плагины для графических форматов GIF, JPEG, MNG и SVG (если приложение поставляется с графическими файлами)

Пример 6-4. Выбор компонентов Qt 4

В этом примере портированное приложение использует библиотеку графического пользовательского интерфейса Qt 4, основную библиотеку Qt 4, все инструменты генерации кода Qt 4 и генератор Makefile Qt 4. Поскольку библиотека `gui` подразумевает зависимость от основной библиотеки, указывать `corelib` нет необходимости. Инструменты генерации кода Qt 4 `moc`, `uic` и `rcc`, а также генератор Makefile `qmake` нужны только для времени построения, поэтому они указаны с суффиксом `_build`:

    USE_QT_VER=    4
    QT_COMPONENTS= gui moc_build qmake_build rcc_build uic_build

## 6.9.3. Прочие соображения

Если вместе с приложением вместо `configure` поставляется файл `.pro`, вы можете использовать следующее:

    HAS_CONFIGURE=	yes

    do-configure:
            @cd ${WRKSRC} && ${SETENV} ${CONFIGURE_ENV} \
                    ${QMAKE} PREFIX=${PREFIX} texmaker.pro

Обратите внимание на сходство со строкой `qmake` из прилагаемого сценария `BUILD.sh`. Передача `CONFIGURE_ENV` обеспечивает видимость переменной `QMAKESPEC` для `qmake`, без которой команда не может работать. `qmake` порождает стандартные Makefile, и, таким образом, отпадает необходимость в написании своих собственных целей `build`.

Приложения Qt часто пишутся в кроссплатформенной манере, и X11/Unix часто не является для них платформой разработки, что в свою очередь часто приводит к соответствующим упущенным моментам:

- Отсутствующие дополнительные пути для заголовочных файлов. Многие приложения идут с поддержкой иконки в системном трее, но пренебрегают смотреть на наличие заголовочных файлов и/или библиотеками в каталогах X11. Вы можете сообщить `qmake`, чтобы она добавила каталоги в пути поиска заголовочных файлов и библиотек через командную строку. К примеру:

      ${QMAKE} PREFIX=${PREFIX} INCLUDEPATH+=${LOCALBASE}/include \
      	LIBS+=-L${LOCALBASE}/lib sillyapp.pro

- Фиктивные пути установки. Иногда данные, такие как иконки и файлы .desktop, устанавливаются по умолчанию в каталоги, которые не просматриваются XDG-совместимыми приложениями. Примером является `editors/texmaker` - взгляните на `patch-texmaker.pro` из каталога `files` этого порта, который можно взять в качестве шаблона исправления этого непосредственно в файле проекта `qmake`.

Пред. | Начало | След.
Использование GNOME | Уровень выше | Использование KDE

По вопросам связанным с системой портов для FreeBSD, пишите по адресу <ports@FreeBSD.org>.
По вопросам, связанным с этой документацией, пишите по адресу <doc@FreeBSD.org>.