6.9 使用 Qt

6.9.1 在 port 中使用 Qt

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

USE_QT_VER表示 port 用到了 Qt 工具套件。 可用的值包括 34; 用于指定使用的 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_ENVCONFIGURE_ARGSMAKE_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网络函数库
openglOpenGL 函数库
qt3supportQt3 兼容支持函数库
qtestlib单元测试函数库
script脚本函数库
sqlSQL 函数库
xmlXML 函数库

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

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

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

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

名字描述
iconenginesSVG 图标引擎插件 (如果应用程序使用 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 并不是开发它的平台, 有时这会导致一些边边角角的问题, 例如:

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