Doxygen能否轻松配置以识别TODO和FIXME行?

30

我刚刚安装并设置了Doxygen实例,但默认情况下它只能找到像这样在代码块中标记的TODO标签:

/**
 * @todo Foo
 */

它似乎找不到:

// TODO Foo
// FIXME Bar
// @todo Baz

大多数处理解析的IDE和Bug跟踪器都可以很好地处理它们,有没有一种简单的方法来配置Doxygen以查找它们并将它们列为待办事项?


3
Doxygen的注释往往位于特殊的注释块中,是吗?我认为如果是一行注释,你可以使用/// @todo Some text(请注意三个正斜杠,而不是通常的两个)。请参见此页面上第二个列表中的第三点。 - Chris
谢谢,我完全错过了那个页面,会去看一下。[我通常不这么懒,只是时间紧迫,但我正在努力在旁边完成这件事,所以至少我们有/一些/东西:)] - Iain Collins
@Chris,你应该将它输入为答案,而Iain,如果它解决了你的问题,你应该接受它。 - tomlogic
@tomlogic 谢谢你的建议 - 我已经完成了。 - Chris
1个回答

48

有许多我们可以使用的示例和方法:

  • 对于带有有效Doxygen命令(例如\todo)的一行注释,您将使用以下语法:

/// \todo Some (optional) text

注意这里有三个斜杠,而不是通常的两个。请参见doxygen文档中特殊文档块部分中第二个列表中的第三点。这可以用于向源代码添加新的待办事项。

  • 通常可以通过在Doxygen配置文件中定义别名来定义自定义标签(例如FIXME)。

    ALIASES += FIXME="\todo"
    
    这将允许您在源代码中编写\FIXME,带有\FIXME前缀的注释将包含在最终文档的待办事项列表中。问题在于,您必须使用\(或@)符号为您的别名添加前缀,并以三个前导斜杠开头的注释开始,如果您想将FIXME保留在代码中,这不是一个选项。

  • 最后,另一种方法,也是我认为您正在寻找的方法,是使用INPUT_FILTER配置文件选项预处理您的源文件。此选项定义了一个命令,该命令应用于doxygen构建文档之前的每个源文件,因此我们可以定义一个命令,将TODOFIXME的实例替换为有效的doxygen标记。

     INPUT_FILTER = "sed -e 's/\/\/.*FIXME/\/\/\/ \\todo/'"
    

    此过滤器将所有包含// FIXME的实例(//FIXME之间可以有任意多个空格或无空格)替换为/// \todo。此替换仅由Doxygen内部进行:您的源文件在磁盘上不会被修改。

  • 注意:这个最后一点受到了Getting doxygen and MSVC TODO tags to work together问题的接受答案的启发。然而,那个答案使用了FILE_VERSION_FILTER配置选项而不是INPUT_FILTER。我认为后者(INPUT_FILTER)在这里更加适用。此外,该答案中使用的sed命令对我来说不起作用。


    这也是我能找到的全部内容了,唉。一直没有时间查看Doxygen的配置或源代码以了解它是如何工作的,暂且接受回答为“否,它只会严格按照文档标记 TODO 和 FIXME 语句”,暂时先不考虑其他答案(但不确定这完全正确)。感谢您的回答。 - Iain Collins
    你的配置文件中是否将 GENERATE_TODOLIST 设置为 YES?另外,你的 todo 是否为小写,并且尝试过使用 \todo 而不是 @todo 吗?最后,尝试使用 //! \todo {optional text} 而不是 /// \todo {optional text} - Chris
    是的,我的问题不是让它以支持的文档格式(如我在问题中所说的)显示TODO和FIXME样式的注释,而是完全按照它们的现有形式(即使用现有代码库,而非考虑Doxygen编写)显示。 - Iain Collins
    1
    @IainCollins 抱歉 - 我完全误解了问题。如果我现在理解正确,您希望doxygen捕获源代码中的TODOFIXME行,而不是用Doxygen命令替换它们。如果是这种情况,我已经在上面的编辑中尝试回答了这个问题。 - Chris
    非常感谢你,Chris!我们团队真的需要这样的东西,但是我的手一直都很忙,没有时间去阅读文档。这对我们帮助很大。 - Iain Collins
    1
    一个更高级的过滤器可以捕获不同风格的注释: 该过滤器适用于C风格注释(/* ... */)和'TODO'注释: INPUT_FILTER = "sed -Ee 's,(//|/\*).*(TODO|FIXME),\1! \\todo ,'"将任何特殊注释替换为//! \todo/*! \todo,具体取决于源中使用的注释样式。 - Florian

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接