> For the complete documentation index, see [llms.txt](https://book.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://book.bsdcn.org/port/di-5-zhang-pei-zhi-makefile/5.3.-gui-lei.md).

# 5.3.归类

## 5.3.1. `CATEGORIES`

当创建一个包时，它会被放置在 **/usr/ports/packages/All** 目录下，并且会从 **/usr/ports/packages** 的一个或多个子目录中创建链接。这些子目录的名称由变量 `CATEGORIES` 指定。这样做是为了方便用户在 FTP 站点或 CDROM 上浏览成千上万的包时更轻松。请查看 [当前的分类列表](https://docs.freebsd.org/en/books/porters-handbook/makefiles/#porting-categories)，选择适合该 Port 的分类。

该列表还决定了 Port 在 Ports 树中的导入位置。如果有多个分类，Port 文件必须放在第一个分类名称的子目录中。更多关于如何选择正确分类的讨论，请参见 [下文](https://docs.freebsd.org/en/books/porters-handbook/makefiles/#choosing-categories)。

## 5.3.2. 当前分类列表

以下是当前的 Port 分类列表。带有星号（`*`）标记的是 *虚拟* 分类——这些分类在 Ports 树中没有对应的子目录，仅作为次要分类使用，并且仅用于搜索目的。

> **注意**
>
> 对于非虚拟分类，每个子目录的 **Makefile** 中的 `COMMENT` 会有一行描述。

| 分类                      | 说明                                                              | 备注                                                                               |
| ----------------------- | --------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **accessibility**       | 帮助残障用户的 Port。                                                   |                                                                                  |
| **afterstep**`*`        | 支持 [AfterStep](http://www.afterstep.org/) 窗口管理器的 Port。          |                                                                                  |
| **arabic**              | 阿拉伯语语言支持。                                                       |                                                                                  |
| **archivers**           | 压缩与归档工具。                                                        |                                                                                  |
| **astro**               | 天文学相关的 Port。                                                    |                                                                                  |
| **audio**               | 音频支持。                                                           |                                                                                  |
| **benchmarks**          | 基准测试工具。                                                         |                                                                                  |
| **biology**             | 生物学相关的软件。                                                       |                                                                                  |
| **budgie**`*`           | 与 Budgie 桌面环境相关的软件。                                             |                                                                                  |
| **cad**                 | 计算机辅助设计工具。                                                      |                                                                                  |
| **chinese**             | 中文语言支持。                                                         |                                                                                  |
| **comms**               | 通信软件。                                                           | 主要是用于与串口通信的软件。                                                                   |
| **converters**          | 字符编码转换工具。                                                       |                                                                                  |
| **databases**           | 数据库相关的软件。                                                       |                                                                                  |
| **deskutils**           | 曾经在计算机发明之前属于桌面上的工具。                                             |                                                                                  |
| **devel**               | 开发工具。                                                           | 不要仅仅因为是库文件就把它们放在这个分类下。除非它们真正不属于其他分类，否则不应放在此分类。                                   |
| **dns**                 | 与 DNS 相关的软件。                                                    |                                                                                  |
| **docs**`*`             | FreeBSD 文档的元 Port。                                              |                                                                                  |
| **editors**             | 一般文本编辑器。                                                        | 专用编辑器应放在特定工具的分类中。例如，数学公式编辑器应放在 **math** 分类中，并将 **editors** 作为第二分类。               |
| **education**`*`        | 与教育相关的软件。                                                       | 包括主要或大部分设计用于帮助用户学习特定主题或进行一般学习的应用程序、工具或游戏。还包括课程编写应用程序、课程交付应用程序以及课堂或学校管理应用程序。      |
| **elisp**`*`            | Emacs-lisp 的 Port。                                              |                                                                                  |
| **emulators**           | 其他操作系统的模拟器。                                                     | 终端模拟器不应放在此分类中。基于 X 的模拟器应放入 **x11** 分类，基于文本的模拟器应放入 **comms** 或 **misc**，具体取决于功能。  |
| **enlightenment**`*`    | 与 Enlightenment 窗口管理器相关的 Port。                                  |                                                                                  |
| **filesystems**         | 文件系统及相关工具。                                                      |                                                                                  |
| **finance**             | 与货币、金融相关的应用程序。                                                  |                                                                                  |
| **french**              | 法语语言支持。                                                         |                                                                                  |
| **ftp**                 | FTP 客户端和服务器工具。                                                  | 如果 Port 同时支持 FTP 和 HTTP，应将其放入 **ftp** 分类，并加上 **www** 作为第二分类。                     |
| **games**               | 游戏。                                                             |                                                                                  |
| **geography**`*`        | 与地理相关的软件。                                                       |                                                                                  |
| **german**              | 德语语言支持。                                                         |                                                                                  |
| **gnome**`*`            | 来自 [GNOME](https://www.gnome.org/) 项目的 Port。                    |                                                                                  |
| **gnustep**`*`          | 与 GNUstep 桌面环境相关的软件。                                            |                                                                                  |
| **graphics**            | 图形工具。                                                           |                                                                                  |
| **hamradio**`*`         | 业余无线电相关软件。                                                      |                                                                                  |
| **haskell**`*`          | 与 Haskell 语言相关的软件。                                              |                                                                                  |
| **hebrew**              | 希伯来语语言支持。                                                       |                                                                                  |
| **hungarian**           | 匈牙利语语言支持。                                                       |                                                                                  |
| **irc**                 | 互联网中继聊天工具。                                                      |                                                                                  |
| **japanese**            | 日语语言支持。                                                         |                                                                                  |
| **java**                | 与 Java™ 语言相关的软件。                                                | **java** 分类不应是 Port 唯一的分类。除非是直接与 Java 语言相关的 Port，否则不建议使用 **java** 作为 Port 的主要分类。 |
| **kde**`*`              | 来自 [KDE](https://www.kde.org/) 项目的 Port（通用）。                    |                                                                                  |
| **kde-applications**`*` | 来自 [KDE](https://www.kde.org/) 项目的应用程序。                         |                                                                                  |
| **kde-frameworks**`*`   | [KDE](https://www.kde.org/) 项目的 Qt 编程附加库。                       |                                                                                  |
| **kde-plasma**`*`       | 来自 [KDE](https://www.kde.org/) 项目的桌面环境。                         |                                                                                  |
| **kld**`*`              | 可加载的内核模块。                                                       |                                                                                  |
| **korean**              | 韩语语言支持。                                                         |                                                                                  |
| **lang**                | 编程语言。                                                           |                                                                                  |
| **linux**`*`            | Linux 应用程序和支持工具。                                                |                                                                                  |
| **lisp**`*`             | 与 Lisp 语言相关的软件。                                                 |                                                                                  |
| **mail**                | 邮件软件。                                                           |                                                                                  |
| **mate**`*`             | 与 MATE 桌面环境相关的 Port，GNOME 2 的一个分支。                              |                                                                                  |
| **math**                | 数值计算软件及其他数学相关工具。                                                |                                                                                  |
| **mbone**`*`            | MBone 应用程序。                                                     |                                                                                  |
| **misc**                | 杂项工具。                                                           | 不属于其他分类的工具。如果可能，尽量为 Port 找到更合适的分类，而不是放在 `misc` 中，因为该分类中的 Port 往往容易被忽视。           |
| **multimedia**          | 多媒体软件。                                                          |                                                                                  |
| **net**                 | 各种网络软件。                                                         |                                                                                  |
| **net-im**              | 即时通讯软件。                                                         |                                                                                  |
| **net-mgmt**            | 网络管理软件。                                                         |                                                                                  |
| **net-p2p**             | 点对点网络应用。                                                        |                                                                                  |
| **net-vpn**`*`          | 虚拟专用网络应用。                                                       |                                                                                  |
| **news**                | USENET 新闻软件。                                                    |                                                                                  |
| **parallel**`*`         | 处理计算中的并行性的应用程序。                                                 |                                                                                  |
| **pear**`*`             | 与 Pear PHP 框架相关的 Port。                                          |                                                                                  |
| **perl5**`*`            | 需要 Perl 5 版本运行的 Port。                                           |                                                                                  |
| **plan9**`*`            | 来自 [Plan9](https://9p.io/wiki/plan9/Download/index.html) 的各种程序。 |                                                                                  |
| **polish**              | 波兰语语言支持。                                                        |                                                                                  |
| **ports-mgmt**          | 用于管理、安装和开发 FreeBSD Ports 和包的工具。                                 |                                                                                  |
| **portuguese**          | 葡萄牙语语言支持。                                                       |                                                                                  |
| **print**               | 打印软件。                                                           | 包括桌面出版工具（如预览器等）。                                                                 |
| **python**`*`           | 与 [Python](https://www.python.org/) 语言相关的软件。                    |                                                                                  |
| **ruby**`*`             | 与 [Ruby](https://www.ruby-lang.org/) 语言相关的软件。                   |                                                                                  |
| **rubygems**`*`         | [RubyGems](https://www.rubygems.org/) 包的 Port。                  |                                                                                  |
| **russian**             | 俄语语言支持。                                                         |                                                                                  |
| **scheme**`*`           | 与 Scheme 语言相关的软件。                                               |                                                                                  |
| **science**             | 不适合其他分类的科学相关 Ports，如 **astro**、**biology** 和 **math**。          |                                                                                  |
| **security**            | 安全工具。                                                           |                                                                                  |
| **shells**              | 命令行 Shell。                                                      |                                                                                  |
| **spanish**`*`          | 西班牙语语言支持。                                                       |                                                                                  |
| **sysutils**            | 系统工具。                                                           |                                                                                  |
| **tcl**`*`              | 使用 Tcl 运行的 Port。                                                |                                                                                  |
| **textproc**            | 文本处理工具。                                                         | 不包括桌面出版工具，这些应放入 **print** 分类。                                                    |
| **tk**`*`               | 使用 Tk 运行的 Port。                                                 |                                                                                  |
| **ukrainian**           | 乌克兰语语言支持。                                                       |                                                                                  |
| **vietnamese**          | 越南语语言支持。                                                        |                                                                                  |
| **wayland**`*`          | 支持 Wayland 显示服务器的 Port。                                         |                                                                                  |
| **windowmaker**`*`      | 支持 Window Maker 窗口管理器的 Port。                                    |                                                                                  |
| **www**                 | 与万维网相关的软件。                                                      | HTML 语言支持也应归入此分类。                                                                |
| **x11**                 | X 窗口系统及其相关工具。                                                   | 该分类仅适用于直接支持窗口系统的软件。不要将常规 X 应用程序放入此分类。大多数应放入其他 **x11-\*** 子分类（见下文）。               |
| **x11-clocks**          | X11 时钟工具。                                                       |                                                                                  |
| **x11-drivers**         | X11 驱动程序。                                                       |                                                                                  |
| **x11-fm**              | X11 文件管理器。                                                      |                                                                                  |
| **x11-fonts**           | X11 字体和字体工具。                                                    |                                                                                  |
| **x11-servers**         | X11 服务器。                                                        |                                                                                  |
| **x11-themes**          | X11 主题。                                                         |                                                                                  |
| **x11-toolkits**        | X11 工具包。                                                        |                                                                                  |
| **x11-wm**              | X11 窗口管理器。                                                      |                                                                                  |
| **xfce**`*`             | 与 [Xfce](https://www.xfce.org/) 桌面环境相关的 Port。                   |                                                                                  |
| **zope**`*`             | [Zope](https://www.zope.org/) 支持。                               |                                                                                  |

## 5.3.3. 选择正确的分类

由于许多分类有重叠，选择哪一个分类作为 Port 的主要分类可能会很繁琐。对此有几个规则。以下是按优先顺序递减的规则：

* 第一个分类必须是物理分类（见[上文](https://docs.freebsd.org/en/books/porters-handbook/makefiles/#porting-categories)）。这是为了使打包工作正常进行。虚拟分类和物理分类可以在之后混合使用。
* 语言特定的分类总是优先。例如，如果该 Port 安装的是日语 X11 字体，则 `CATEGORIES` 行应写为 **japanese x11-fonts**。
* 特定的分类应列在不太具体的分类之前。例如，一个 HTML 编辑器应该列为 **www editors**，而不是反过来。并且，如果 Port 属于 **irc**、**mail**、**news**、**security** 或 **www** 中的任何一个分类时，不要列出 **net**，因为 **net** 已经隐含包含在内。
* **x11** 仅在主要分类为自然语言时作为二级分类使用。特别是，不要将 **x11** 放在 X 应用程序的分类行中。
* Emacs 模式应放置在与其支持的应用程序相同的 Ports 分类中，而不是放在 **editors** 中。例如，用于编辑某编程语言源文件的 Emacs 模式应放在 **lang** 分类下。
* 安装可加载内核模块的 Ports 也应在 `CATEGORIES` 行中包含虚拟分类 **kld**。这可以通过添加 `USES=kmod` 自动处理。
* **misc** 不应与任何其他非虚拟分类一起使用。如果 `CATEGORIES` 中出现了 **misc** 和其他分类，那就意味着可以安全地删除 **misc**，并将 Port 只放在另一个子目录下。
* 如果该 Port 确实不属于任何其他分类，则将其放入 **misc**。

如果分类不明确，请在[提交 Port 时](https://bugs.freebsd.org/submit/)在 bug 数据库中加入评论，以便在导入前进行讨论。作为提交者，请向 [FreeBSD Ports 邮件列表](https://lists.freebsd.org/subscription/freebsd-ports)发送通知，以便我们先进行讨论。很多时候，新的 Ports 被导入到错误的分类中，之后又立即被移动。

## 5.3.4. 提议新分类

随着 Ports 的不断发展，已经引入了多个新分类。新分类可以是 *虚拟* 分类——即在 Ports 树中没有对应的子目录的分类——或者是 *物理* 分类——即有对应子目录的分类。本节讨论了创建新物理分类时涉及的问题。在提议新分类之前，请仔细阅读以下内容。

我们现有的做法是，除非有大量的 Port 明显属于该分类，或者这些 Port 是逻辑上独立的且属于一般兴趣有限的群体（例如与口语人类语言相关的分类），否则避免创建新的物理分类，最好是两者都满足。

这样做的原因是，这样的变更会给 [提交者和用户](https://docs.freebsd.org/en/articles/committers-guide/#ports)带来相当大的工作量，特别是那些追踪 Ports 变化的用户。此外，提议的分类更改往往会引发争议。（也许这是因为对于分类何时“过大”以及分类是否应便于浏览（因此理想的分类数量是多少）等问题，缺乏明确的共识，等等。）

以下是提出新物理分类的程序：

1. 在 [FreeBSD Ports 邮件列表](https://lists.freebsd.org/subscription/freebsd-ports)上提议新分类。提供详细的理由，说明现有分类不足之处，并列出拟迁移到该分类的现有 Ports。（如果有在 Bugzilla 中待处理的符合该分类的新 Ports，也请列出。）如果你是维护者和/或提交者，请提及这一点，因为这可能有助于你的提议。
2. 参与讨论。
3. 如果看起来有支持这一想法的声音，请提交一个 PR，包含新分类的理由和需要迁移的现有 Ports 列表。理想情况下，PR 还应包括以下补丁：
   * 新 Ports 的 **Makefile**，在它们被复制到新位置后
   * 新分类的 **Makefile**
   * 旧分类的 **Makefile**
   * 依赖旧 Ports 的 **Makefile**
   * （额外的奖励，提供根据提交者指南中程序要求需要更改的其他文件）
4. 由于它影响 Ports 基础设施，并涉及迁移和补丁许多 Ports，可能还需要在构建集群上运行回归测试，因此请将 PR 分配给 Ports 管理团队 <portmgr@FreeBSD.org>。
5. 如果该 PR 获得批准，提交者将需要按照 [提交者指南](https://docs.freebsd.org/en/articles/committers-guide/#ports) 中概述的其余程序进行操作。

提议新虚拟分类与上述类似，但要简单得多，因为实际上不需要迁移任何 Port。在这种情况下，PR 中仅需包含那些将新分类添加到受影响 Port 的 `CATEGORIES` 的补丁。

## 5.3.5. 提议重新组织所有分类

偶尔有人提议以 2 层结构或其他某种关键字结构重新组织分类。到目前为止，这些提议没有取得任何进展，因为虽然提出这些提议很容易，但将整个现有 Ports 进行任何形式的重组工作非常庞大，可以说是非常艰巨的任务。在发布此类想法之前，请阅读邮件列表档案中的这些提议的历史记录。此外，准备好接受挑战，提供一个有效的原型。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://book.bsdcn.org/port/di-5-zhang-pei-zhi-makefile/5.3.-gui-lei.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
