自 1.2.18 版本起,Doxygen 可以生成一种我们称之为“Perl 模块输出格式”的新输出格式。它被设计为一种中间格式,可以用于生成新的定制输出,而无需修改 Doxygen 源代码。因此,它的目的类似于 Doxygen 也可以生成的 XML 输出格式。XML 输出格式更标准,但 Perl 模块输出格式可能更简单易用。
Perl 模块输出格式目前仍处于实验阶段,未来版本可能会以不兼容的方式进行更改,尽管这种可能性不大。它也缺乏其他 Doxygen 后端的一些功能。但是,它已经可以用于生成有用的输出,例如基于 Perl 模块的
生成器所展示的。
请将您在 Perl 模块后端或基于 Perl 模块的
生成器中发现的任何错误或问题报告给 Doxygen 问题跟踪器。也欢迎提出建议(另请参阅:如何报告错误)。
当 Doxyfile 中启用 GENERATE_PERLMOD 标签时,运行 Doxygen 会在您的输出目录的 perlmod/ 子目录中生成一些文件。这些文件如下:
DoxyDocs.pm:这是实际包含文档的 Perl 模块,其格式为 下文 所述的 Perl 模块格式。
DoxyModel.pm:此 Perl 模块描述了 DoxyDocs.pm 的结构,与实际文档无关。有关详细信息,请参阅 下文。
doxyrules.make:此文件包含用于构建和清理从 Doxyfile 生成的文件的 make 规则。还包含这些文件的路径和其他相关信息。此文件旨在由您自己的 Makefile 包含。
Makefile:这是一个简单的 Makefile,包含 doxyrules.make。
要使用存储在 DoxyDocs.pm 中的文档,您可以使用 Doxygen 提供的默认基于 Perl 模块的生成器之一(目前包括基于 Perl 模块的
生成器,请参阅 下文),或者编写您自己的定制生成器。如果您对 Perl 有一定的了解,这应该不会太难,这也是将 Perl 模块后端包含在 Doxygen 中的主要目的。有关如何执行此操作的详细信息,请参阅 下文。
基于 Perl 模块的
生成器目前处于实验阶段且不完整,但您可能仍然觉得它很有用。它可以为文件和类中的函数、typedef 和变量生成文档,并且可以通过重新定义
宏进行大量定制。但是,目前还没有关于如何执行此操作的文档。
将 Doxyfile 中的 PERLMOD_LATEX 标签设置为 YES 会在您的输出目录的 perlmod/ 子目录中创建一些附加文件。这些文件包含生成 PDF 和 DVI 输出所需的 Perl 脚本和
代码,分别使用 pdflatex 和 latex。自动化这些文件使用的规则也已添加到 doxyrules.make 和 Makefile 中。
附加生成的文件如下:
doxylatex.pl:此 Perl 脚本使用 DoxyDocs.pm 和 DoxyModel.pm 生成 doxydocs.tex,这是一个
文件,其中包含
代码可以访问的格式的文档。此文件不能直接进行 LaTeX 编译。
doxyformat.tex:此文件包含
代码,该代码将 doxydocs.tex 中的文档转换为适合
编译并呈现给用户的
文本。
doxylatex-template.pl:此 Perl 脚本使用 DoxyModel.pm 生成 doxytemplate.tex,这是一个
文件,定义了一些宏的默认值。doxytemplate.tex 由 doxyformat.tex 包含,以避免显式定义一些宏。
doxylatex.tex:这是一个非常简单的
文档,它加载了一些包并包含 doxyformat.tex 和 doxydocs.tex。此文档通过添加到 doxyrules.make 的规则进行
编译,以生成 PDF 和 DVI 文档。
要尝试此功能,您需要安装 latex、pdflatex 以及 doxylatex.tex 使用的包。
使用以下命令将您的 Doxyfile 更新到最新版本
doxygen -u Doxyfile
在您的 Doxyfile 中将 GENERATE_PERLMOD 和 PERLMOD_LATEX 标签都设置为 YES。
在您的 Doxyfile 上运行 Doxygen
doxygen Doxyfile
您的输出目录中应该会出现一个 perlmod/ 子目录。进入 perlmod/ 子目录并运行
make pdf
这将生成一个 doxylatex.pdf,其中包含 PDF 格式的文档。
运行
make dvi
这将生成一个 doxylatex.dvi,其中包含 DVI 格式的文档。
Doxygen 生成的 Perl 模块文档存储在 DoxyDocs.pm 中。这是一个非常简单的 Perl 模块,只包含两条语句:对变量 $doxydocs 的赋值和通常用于结束 Perl 模块的惯例 1; 语句。
文档存储在变量 $doxydocs 中,然后可以通过使用 DoxyDocs.pm 的 Perl 脚本访问。
$doxydocs 包含一个由三种类型的节点组成的树状结构:字符串、哈希和列表。
字符串:这些是普通的 Perl 字符串。它们可以是任何长度,可以包含任何字符。它们的语义取决于它们在树中的位置。这种类型的节点没有子节点。
哈希:这些是对匿名 Perl 哈希的引用。一个哈希可以有多个字段,每个字段都有一个不同的键。哈希字段的值可以是字符串、哈希或列表,其语义取决于哈希字段的键和哈希在树中的位置。哈希字段的值是节点的子节点。
列表:这些是对匿名 Perl 列表的引用。一个列表具有未定义数量的元素,这些元素是节点的子节点。每个元素具有相同的类型(字符串、哈希或列表)和相同的语义,具体取决于列表在树中的位置。
如您所见,$doxydocs 中包含的文档对简单的 Perl 脚本进行处理没有任何特殊障碍。
您可能对处理 DoxyDocs.pm 中包含的文档感兴趣,而无需考虑文档树中每个节点的语义。为此,Doxygen 生成了一个 DoxyModel.pm 文件,其中包含一个数据结构,描述了文档树中每个节点的类型和子节点。
本节的其余部分尚未编写,但在此期间,您可以查看 Doxygen 生成的 Perl 脚本(例如 doxylatex.pl 或 doxytemplate-latex.pl)以了解如何使用 DoxyModel.pm。
这是 DoxyDocs.pm 中文档树结构的描述。下面列表中的每个项目都描述了树中的一个节点,描述格式如下:
其中
“key =>” 部分仅在父节点为哈希时出现。“key”是此节点的键。
“名称” 是节点的唯一名称,在 DoxyModel.pm 中定义。
“(类型)” 是节点的类型:“string”表示字符串节点,“hash”表示哈希节点,“list”表示列表节点,“doc”表示文档子树。文档子树的结构尚未在任何地方描述,但您可以查看例如 doxylatex.pl 以了解如何处理它。
文档树中每个节点的含义如下: