6.18 使用 wxWidgets

  这一节介绍了在 ports tree 中的 wxWidgets 库的现状, 以及它与 ports 系统的集成。

6.18.1 介绍

  许多不同版本的 wxWidgets 库之间是存在相互冲突的 (它们会安装同名的文件) 在 ports 系统中, 这一问题是通过将不同的版本以包含版本号后缀的名字安装来解决的。

  这样做的一个最明显的缺点是, 应用程序必须进行修改, 才能找到所希望的版本。 幸运的是, 多数应用程序会调用 wx-config 脚本来确定需要的编译器和连接器选项。 这个脚本会随可用的版本不同而有不同的名字。 主要的应用程序都会尊重环境变量的配置, 或提供一个 configure 参数, 用以指定调用哪个 wx-config。 如果不是这样的话, 就需要对应用程序打补丁了。

6.18.2 版本的选择

  为了让您的 port 使用指定版本的 wxWidgets, 可以定义两个变量 (如果只定义了一个, 则另一个会取默认值):

表 6-24. 用于选择 wxWidgets 版本的变量

变量 说明 默认值
USE_WX 列出这个 port 能使用的版本 全部版本
USE_WX_NOT 列出这个 port 不能使用的版本

  下面是可用的 wxWidgets 版本, 以及对应的 ports:

表 6-25. 可用的 wxWidgets versions

版本 Port
2.4 x11-toolkits/wxgtk24
2.6 x11-toolkits/wxgtk26
2.8 x11-toolkits/wxgtk28

注意:2.5 版开始, 也提供了对应的 Unicode 版本, 这种版本可以通过 slave port 安装, 与普通版本相比, 它会多一个 -unicode 后缀, 不过这可以通过使用变量来处理 (请参见 第 6.18.4 节)。

  在 表 6-24 中的变量, 可以设为下列值或由空格分隔的组合:

表 6-26. wxWidgets 版本

说明 例子
单个版本 2.4
某版本以上版本 2.4+
某版本以下版本 2.6-
某段版本 (版本号较小的必须在前) 2.4-2.6

  除此之外, 还有一些用以从可用的本那本中选择所希望的版本的变量。 这种变量也可以设为一组版本, 而靠前的版本的优先级更高。

表 6-27. 用于选择希望的版本的 wxWidgets versions

变量名 用于
WANT_WX_VER port
WITH_WX_VER 用户

6.18.3 选择组件

  也有一些其他应用, 尽管它们本身并不是 wxWidgets 库, 但却与之相关。 这些应用程序可以在 WX_COMPS 变量中使用, 以下是可用的组件:

表 6-28. 可用的 wxWidgets 组件

名称 说明 版本限制
wx 主库
contrib 第三方库
python wxPython (Python 绑定) 2.4-2.6
mozilla wxMozilla 2.4
svg wxSVG 2.6

  您可以为每个依赖的组件, 通过冒号分隔的后缀指定其类型。 如果没有指定, 则会使用默认的依赖类型 (参见 表 6-30)。 下面是可用的类型:

表 6-29. 可用的 wxWidgets 依赖类型

名称 说明
build 联编时需要该组件, 相当于 BUILD_DEPENDS
run 运行时需要该组件, 相当于 RUN_DEPENDS
lib 联编和运行时均需要该组件, 相当于 LIB_DEPENDS

  组件的默认依赖关系类型, 如下表所示:

表 6-30. 默认的 wxWidgets 依赖关系类型

组件 依赖关系类型
wx lib
contrib lib
python run
mozilla lib
svg lib

例 6-6. 选择 wxWidgets 组件

下面的片段展示了使用 wxWidgets 版本 2.4 及第三方库的方法。

USE_WX=       2.4
WX_COMPS=     wx contrib

6.18.4 Unicode

  wxWidgets 库从其 2.5 版开始支持 Unicode 了。 在 ports 系统中, 这两种版本均有提供, 并可以通过下列变量来选择:

表 6-31. 用以在 Unicode 版本的 wxWidgets 的变量

变量 说明 作用
WX_UNICODE 该 port 只能 配合 Unicode 版本使用 port
WANT_UNICODE port 能够与两种版本配合使用, 但希望使用 Unicode 版本 port
WITH_UNICODE 令 port 使用 Unicode 版本 用户
WITHOUT_UNICODE 令 port 使用普通版本, 如果支持的话 (即未定义 WX_UNICODE) 用户

警告: 如果 port 同时支持 Unicode 和普通版本, 请不要使用 WX_UNICODE。 如果希望默认启用 Unicode, 应定义 WANT_UNICODE

6.18.5 检测已安装的版本

  要检测系统中安装的版本, 就需要定义 WANT_WX。 如果没有将其设置为特定的版本, 则组件将包含版本后缀。 HAVE_WX 变量在检测完成后会自动填入内容。

例 6-7. 检测已安装的 wxWidgets 版本和组件

下面的片段可以在安装 wxWidgets 的系统中令 port 使用它, 反之则作为一项选项提供。

WANT_WX=        yes

.include <bsd.port.pre.mk>

.if defined(WITH_WX) || ${HAVE_WX:Mwx-2.4} != ""
USE_WX=         2.4
CONFIGURE_ARGS+=--enable-wx
.endif

下面的片段在系统中有安装过时启用 wxPython 支持, 或在没有安装时作为选项提供; 对 wxWidgets 也是如此办理, 版本皆为 2.6

USE_WX=         2.6
WX_COMPS=       wx
WANT_WX=        2.6

.include <bsd.port.pre.mk>

.if defined(WITH_WXPYTHON) || ${HAVE_WX:Mpython} != ""
WX_COMPS+=      python
CONFIGURE_ARGS+=--enable-wxpython
.endif

6.18.6 定义的变量

  以下是一些可以在 port 中使用的变量 (这之前需要定义 表 6-24 中的至少一个变量)。

表 6-32. 为使用 wxWidgets 的 port 定义的变量

变量名 说明
WX_CONFIG wxWidgets wx-config 脚本的路径 (名字会随版本不同而不同)
WXRC_CMD wxWidgets wxrc 程序的路径 (名字会随版本不同而不同)
WX_VERSION 将要用到的 wxWidgets 版本 (例如, 2.6)
WX_UNICODE 如果没有定义, 而将会使用 Unicode 时, 系统将自动定义此变量。

6.18.7 在 bsd.port.pre.mk 中进行处理

  如果您需要在引用了 bsd.port.pre.mk 之后立即对一些变量进行处理, 则需要定义 WX_PREMK

重要: 如果定义了 WX_PREMK, 则在此 之后 定义的依赖关系、 组件和变量将不会生效, 您在引用 bsd.port.pre.mk 之前的 wxWidgets port 变量将直接起作用。

例 6-8. 在命令中使用 wxWidgets 变量

下面的片段以执行 wx-config 脚本来得到完整的版本号, 将其赋值到变量中, 并传递给一个程序举例说明了 WX_PREMK 的用法。

USE_WX=         2.4
WX_PREMK=       yes

.include <bsd.port.pre.mk>

.if exists(${WX_CONFIG})
VER_STR!=       ${WX_CONFIG} --release

PLIST_SUB+=     VERSION="${VER_STR}"
.endif

注意: 在 target 中的 wxWidgets 变量可以直接使用, 而无需 WX_PREMK 的参与。

6.18.8 额外的 configure 参数

  某些 GNU configure 脚本在只设置了 WX_CONFIG 环境变量时, 无法自动找到 wxWidgets, 而需要使用额外的参数来加以指定。 您可以使用 WX_CONF_ARGS 变量来给出这些参数。

表 6-33. 可用于 WX_CONF_ARGS 的值

可用值 结果
absolute --with-wx-config=${WX_CONFIG}
relative --with-wx=${LOCALBASE} --with-wx-config=${WX_CONFIG:T}
若您有关于 FreeBSD ports 系统的问题, 请发送电子邮件至 <[email protected]>。
关于此文档的任何问题, 请致函 <[email protected]>。