自 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 知识,这应该不会太难,这也是在 Doxygen 中包含 Perl 模块后端的主要目的。有关如何执行此操作的详细信息,请参阅 下文。
基于 Perl 模块的 生成器目前还处于实验阶段且不完整,但您可能会发现它仍然很有用。它可以为文件和类中的函数、typedef 和变量生成文档,并且可以通过重新定义 宏进行大量自定义。但是,目前还没有关于如何执行此操作的文档。
在 Doxyfile
中将 PERLMOD_LATEX 标签设置为 YES
,可以在输出目录的 perlmod/
子目录中创建一些额外的文件。这些文件包含必要的 Perl 脚本和 代码,以便分别使用 pdflatex
和 latex
从 Perl 模块输出生成 PDF 和 DVI 输出。自动化使用这些文件的规则也会添加到 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 以了解如何处理它。
文档树中每个节点的含义如下: