表 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}"
当把 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
如果应用程序没有提供 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 工程文件中修正这个问题。