FreeBSD Porter 手册
上一页 | 第6章 　特殊情况 | 下一页

# 6.9 使用 Qt

## 6.9.1 在 port 中使用 Qt

表 6-7. 用于使用 Qt 的 port 的变量

`USE_QT_VER` | 表示 port 用到了 Qt 工具套件。 可用的值包括 `3` 和 `4`； 用于指定使用的 Qt 的主版本。 此外， 系统会自动为 `configure` 脚本和 `make` 命令提供必要的参数。
`QT_PREFIX` | 这个变量会自动设为 Qt 的安装路径 (只读变量)。
`MOC` | 这个变量会自动设为 `moc` 的路径 (只读变量)。 默认值与 `USE_QT_VER` 变量的值有关。
`QTCPPFLAGS` | 通过 `CONFIGURE_ENV` 传给 Qt 工具套件的编译参数。 默认配置与 `USE_QT_VER` 有关。
`QTCFGLIBS` | 通过 `CONFIGURE_ENV` 传给 Qt 工具套件的连接库。 默认配置与 `USE_QT_VER` 有关。
`QTNONSTANDARD` | 禁止系统自动修改 `CONFIGURE_ENV`、 `CONFIGURE_ARGS` 和 `MAKE_ENV`。

表 6-8. 其他用于使用 Qt 4.x 的变量

`QT_COMPONENTS` | 用于指定 Qt4 工具和函数库的依赖。 详情见后。
`UIC` | 这个变量会自动设为 `uic` 的路径 (只读变量)。 默认值与 `USE_QT_VER` 有关。
`QMAKE` | 这个变量会自动设为 `qmake` 的路径 (只读变量)。 其默认值与 `USE_QT_VER` 有关。
`QMAKESPEC` | 这个变量会自动设为 `qmake` 配置文件的路径 (只读变量)。 其默认值与 `USE_QT_VER` 有关。

当设置了 `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}" CPPFLAGS="${CPPFLAGS} ${QTCPPFLAGS}" LIBS="${QTCFGLIBS}" \
                     QTDIR="${QT_PREFIX}" KDEDIR="${KDE_PREFIX}"

如果将 `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` 变量来指定对 Qt4 工具和函数库的依赖了。 通过在组件的名称后面添加 `_build` 或 `_run` 这样的后缀， 则可相应地将这依赖关系限于联编或运行时刻。 在没有指定后缀时， 系统默认在联编和运行时刻均依赖该组件。 通常情况下在指明函数库一类的组件时应不使用后缀， 联编工具类组件应使用 `_build` 后缀， 而插件类组件， 则应使用 `_run` 后缀。 下表中列出了一些最常用的组件 (全部可用的组件， 则在 `/usr/ports/Mk/bsd.qt.mk` 中的 `_QT_COMPONENTS_ALL` 列出)：

表 6-9. 可用的 Qt4 函数库组件

名字 | 描述
--- | ---
`corelib` | 核心库 (在 port 只使用 `corelib` 而没有用到其他库时可以省略)
`gui` | 图形用户界面库
`network` | 网络函数库
`opengl` | OpenGL 函数库
`qt3support` | Qt3 兼容支持函数库
`qtestlib` | 单元测试函数库
`script` | 脚本函数库
`sql` | SQL 函数库
`xml` | XML 函数库

您可以通过在成功编译之后， 通过在主可执行文件上运行 `ldd` 来确定所需的库。

表 6-10. 可用的 Qt4 工具组件

名字 | 描述
--- | ---
`moc` | 元对象编译器 (几乎所有的 Qt 应用程序在联编过程中都需要它)
`qmake` | Makefile 生成器 / 联编工具
`rcc` | 资源编译器 (如果应用程序中包含 `*.rc` 或 `*.qrc` 文件， 就需要它)
`uic` | 用户界面编译器 (如果应用程序中包含使用 Qt Designer 创建的 `*.ui` 文件时就需要它 - 一般说来 Qt 应用程序都会使用 GUI 的)

表 6-11. 可用的 Qt4 插件组件

名字 | 描述
--- | ---
`iconengines` | SVG 图标引擎插件 (如果应用程序使用 SVG 图标)
`imageformats` | 用于 GIF、 JPEG、 MNG 和 SVG 的 imageformat 插件 (如果应用程序使用图片文件)

例 6-3. 选择 Qt4 组件

在这个例子中， 我们将要移植的应用程序用到了 Qt4 图形用户界面函数库、 Qt4 核心 (core) 函数库、 所有 Qt4 代码生成工具以及 Qt4 的 Makefile 生成器。 由于 gui 函数库会自动附带对核心函数库的依赖， 因此并不需要明确指出需要 corelib 的依赖关系。 Qt4 代码生成工具 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} -unix PREFIX=${PREFIX} texmaker.pro

请注意， 这与系统提供的 `BUILD.sh` 中的 `qmake` 类似。 传递 `CONFIGURE_ENV` 能够确保 `qmake` 可以看到 `QMAKESPEC` 变量， 否则它可能无法正常工作。 `qmake` 会生成标准的 Makefile， 因此无需自行编写 `build` target。

Qt 应用程序通常会编写为能够跨平台使用， 通常 X11/Unix 并不是开发它的平台， 有时这会导致一些边边角角的问题， 例如：

- 缺少必要的 includepaths。 许多应用程序会使用托盘图标支持， 但忽略了这些头或库文件需要在 X11 目录中查找。 您可以通过命令行告诉 `qmake` 将这些头文件和函数库加入到搜索路径中， 例如：

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

- 有问题的安装路径。 有时， 类似图标或 .desktop 文件这样的一些数据， 默认情况下没有安装到 XDG-兼容的程序会扫描的路径中。 `editors/texmaker` 就是一个这样的例子 - 请参考这个 port 的 `files` 目录中的 `patch-texmaker.pro`， 以了解如何在 Qmake 工程文件中修正这个问题。

上一页 | 起始页 | 下一页
使用 GNOME | 上一级 | 使用 KDE

若您有关于 FreeBSD ports 系统的问题， 请发送电子邮件至 <ports@FreeBSD.org>。
关于此文档的任何问题， 请致函 <doc@FreeBSD.org>。