【问题标题】:Doxygen: how to include a markdown page to document a groupDoxygen:如何包含一个降价页面来记录一个组
【发布时间】:2018-08-31 17:11:12
【问题描述】:

我有一个相当复杂的项目,我想用 doxygen 记录它。

我在记录代码方面没有问题,而且我还设法使用自定义 README.md 文件以及 Doxyfile 中的“USE_MDFILE_AS_MAINPAGE = README.md”指令创建了一个漂亮的首页。

我定义了几个组 (@defgroup),它们在我的文档中显示为“模块”。

除了常用的函数/变量/类型文档之外,我想为每个组添加一个“主页”以提供一般信息。

我尝试在组定义中添加自定义 MODULENAME.md 文件以及匹配的 @includedoc MODULENAME.md 条目,它似乎有效(我看到几行,如:“Generating docs for page md_mcu_noitr_coro_README...”),但我找不到页面是否以及在哪里已链接(我希望在模块的“详细说明”中看到它,因为如果我将一些文档内嵌在我放置“@includedoc”指令的位置,就会发生这种情况。

我的一个模块的 sn-p 是:

/**
 * @file coro.h
 * @brief definition of coroutine implementing functions.
 *
 * @date: Feb 8, 2018
 * @author: myself
 *
 * @defgroup coro "Coroutine implementation in plain 'C'."
 *
 * @includedoc mcu_noitr/coro/README.md
 * @{
 *
 */

我做错了什么?

注意: 这也有点令人惊讶,我需要将整个路径从我的 Doxyfile 所在的位置放置,否则即使它位于包含 @ 的文件旁边,doxygen 也不会找到它987654331@命令。

【问题讨论】:

  • 首先关于注释。您需要 Doxyfile 所在位置的相对路径/或者更好地说是 doxygen 启动位置的相对路径,这并不奇怪,因为可能有多个 README.md 文件,此时 doxygen 应该做出猜测。
  • 为什么要通过单独的文件来做。你不能直接在 defgroup 命令中包含降价代码吗?
  • @albert:我想添加一个单独的文件,因为它是大量的写​​作,它会将“真实代码”向下推几百行;另一个原因是使用真正的 Markdown 编辑器可以简化写作,而不是在多行“C”注释中。关于注释:我希望正常的“#include”行为:计算相对于包含文件的路径; Doxygen 将所有数据都猜对了。
  • 关于地点和编辑的推理非常有效。关于“注意”,请在 doxygen 错误跟踪 (github.com/doxygen/doxygen/issues/new) 中提交问题。之前的cmets忘记了:你用的是哪个版本的doxygen?
  • 刚刚做了一个小测试,看起来不起作用,据我所知这是由于降价解析的时刻。可能包含的文档必须经过“降价预处理”。可能最好在 doxygen 错误跟踪 (github.com/doxygen/doxygen/issues/new) 中提交问题,包括一个小的、自包含的示例(tar 或 zip 中的源+配置文件)以重现问题?跨度>

标签: doxygen


【解决方案1】:

我还遇到了一个问题,即通过 \includedoc\include{doc} 包含带有 Markdown 格式文本的文件不会导致正确解释的 Markdown。请注意,我包含了 other Markdown 文件中的 Markdown 文件。我的解决方法是在 Markdown 文件上使用广泛可用的 C 预处理器 (cpp),并使用它的 #include 指令。您当然可以按照 cpp 手册页中的建议使用真正的通用文本处理器,例如 M4。将 Doxyfile 中的FILTER_PATTERNS 设置为:

FILTER_PATTERNS = *.md="cpp -P -traditional-cpp"

您需要-P 选项来避免它输出行标记,这会使 Doxygen 感到困惑。需要-traditional-cpp 以避免 cpp 吃掉对正确解释 Markdown 很重要的空白。不要使用单引号,因为这会导致 Doxygen 通过 sh 调用 cpp 时出错。

然后在我的 Markdown 主页中:

Main Page {#mainpage}
==========

Blah blah blah.

#include "other.md"

使用FILTER_PATTERNS 代替INPUT_FILTER 可以避免不允许添加或删除行的问题。

我的 markdown 文件在同一个目录中,我猜如果它们位于不同的位置,您可以通过 -I 告诉 cpp,这将满足您对您提交的 issue 上包含路径的期望.

【讨论】:

  • 我无法完成这项工作。当我按照建议使用FILTER_PATTERNS = *.md="cpp -P -traditional-cpp" 时,.md 文件不会显示任何内容。
【解决方案2】:

目前 doxygen 不考虑像 \includedoc 这样的命令可以包含降价代码的事实。目前唯一的可能是编写一个过滤器,请参阅 doxygen 配置文件中的配置参数INPUT_FILTER,(未测试!)用该文件的代码替换 \includedoc`。

【讨论】:

  • 我会探索,但初读不好看:“注意过滤器不能添加或删除行;它在扫描代码之前应用,而不是在生成输出代码时应用。如果添加或删除线,将无法正确放置锚点。”
  • 我同意INPUT_FILTER 可能由于您提到的论点而无法工作,因此问题可能是唯一的解决方法(:-()
  • 嗯...我看到一个很长的积压补丁列表(包括你自己的一个,日期为 2014 年 2 月 23 日!)。在您看来,doxygen 核心组的响应速度如何?
  • 取决于补丁有一个积压,但我最近添加了相当多的建议补丁,如您所见。目前,master 中有 78 个补丁不在最新版本中,还有一些直接来自 Dimitri 的修复。提议的补丁并不总是像它一样进入发行版,例如与 doxygen 哲学相矛盾或破坏了其他一些代码。
  • doxygen 核心组并没有那么大(Dimitri),除了正常的工作之外,还有其他的工作要做(都是自愿的!)。今年的其他一些任务是从 bugzilla 转移到 github 问题跟踪器,将文件托管/电子邮件地址从 stack.nl 转移到 sourceforge/gmail,...
猜你喜欢
  • 2014-08-16
  • 2013-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-09
  • 2014-01-15
  • 1970-01-01
相关资源
最近更新 更多