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 网络函数库
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 并不是开发它的平台, 有时这会导致一些边边角角的问题, 例如:

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