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

  • 缺少必要的 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 工程文件中修正这个问题。

本文档和其它文档可从这里下载: ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

如果对于FreeBSD有问题,请先阅读 文档,如不能解决再联系 <questions@FreeBSD.org>.

关于本文档的问题请发信联系 <doc@FreeBSD.org>.