【问题标题】:Doxygen are not collecting all \todo in global todo listDoxygen 没有收集全局待办事项列表中的所有 \todo
【发布时间】:2020-02-10 17:39:30
【问题描述】:

我对 doxygen 有疑问。并非我所有的 \todo 都收集在全局待办事项列表中,但其中大部分都收集了。我用一个源文件和头文件以及一个配置文件制作了一个简单的 C 示例,我在其中放置了待办事项,我希望 doxygen 将它们收集到全局待办事项列表中。

我的全局待办事项列表缺少以下代码 sn-p 中显示的待办事项,这意味着我的公共函数体内的待办事项(myFunc 中的 test_todo12)以及 cfg 文件中的待办事项(test_todo16 和 test_todo17) , 两者都实现如下所示。

test.h:

/**
 * Definition of test structure.
 */
typedef struct def_struct_
{
    int32_t first;     /**< First element.*/
    int32_t second;    /**< Second element. */
    int32_t third;     /**< third element. */
} def_struct_t;

/**************************************************************************************************/
/**
 * \brief   My func description.
 *
 * \param[ in ] test_param Input parameter to myFunc.
 *
 * \return      bool
 * \retval      false   false on non success.
 * \retval      true    true on success.
 *
**************************************************************************************************/
bool myFunc( uint32_t test_param );

test.c:

#include <stdint.h>
#include <stdbool.h>

#include "test.h"

#include "test.cfg"

bool myFunc( uint32_t test_param )
{
    uint32_t testVar = test_param ;

    //! This function does nothing. \todo test_todo12
    testVar++;

    return true;
}

test.cfg:

/** test cfg
 * \todo test_todo16
 */
 static def_struct_t test_cfg[2] = 
 {
     .first = 123 //! \todo test_todo17
 }

我使用的是 doxygen 1.8.14 版

与默认设置相比,我的 doxygen 配置文件的差异如下(在尝试了很多不同的组合之后):

OPTIMIZE_OUTPUT_FOR_C  = YES
TOC_INCLUDE_HEADINGS   = 1
TYPEDEF_HIDES_STRUCT   = YES
EXTRACT_PRIVATE        = YES
EXTRACT_STATIC         = YES
INTERNAL_DOCS          = YES
HIDE_SCOPE_NAMES       = YES
WARN_NO_PARAMDOC       = YES
RECURSIVE              = YES
EXCLUDE_PATTERNS       = */README.md 
EXAMPLE_RECURSIVE      = YES
SOURCE_BROWSER         = YES
GENERATE_TREEVIEW      = YES
USE_MATHJAX            = YES
GENERATE_LATEX         = NO
CLASS_DIAGRAMS         = NO
HAVE_DOT               = YES
UML_LOOK               = YES
DOT_PATH               = "C:\Program Files (x86)\Graphviz2.38\lib\release\lib"
DOTFILE_DIRS           = "C:\Program Files (x86)\Graphviz2.38\lib\release\lib" \ "C:\Program Files (x86)\Graphviz2.38\bin"
PLANTUML_JAR_PATH      = C:\tools\plantUML

and added *.cfg \ to FILE_PATTERNS

链接到完整的可编译代码和 doxygen 配置(显示此问题的最小示例):Link to code

当我导航到公共功能“myFunc”时,我看到了待办事项,它只是在全局待办事项列表中丢失了。

cfg 文件似乎根本不包含在 doxygen 文档中,尽管它包含在 C 文件中,但应该将其视为该文件的一部分?或者是否真的有必要为包含这些 cfg 文件做一些额外/特殊的事情?如果是这样,有人知道我错过了什么吗?

我希望有人能帮我解决我的问题,也许公共函数体中的 todo 甚至是一个错误?

问候 杰斯帕

【问题讨论】:

  • 欢迎,将代码放在外部资源中并不好,因为这可能不是持久的,人们不喜欢点击它,所以在问题中包含Minimal, Complete, and Verifiable example。关于 doxygen 的配置文件(你用的是哪个版本?),给出与标准 Doxyfile 的区别(用当前版本的 doxygen,1.8.16,doxygen -x Doxyfile 就可以了)。
  • 对于说问题应该关闭的人,因为它是题外话,OP 在使用 doxygen 为文档生成正确结果时遇到问题,我认为这里的问题是可以的。跨度>
  • 谢谢阿尔伯特。如果喜欢的话,我会尝试做一个最小的例子。我虽然提出了完整的代码,因为在这种情况下我自己更喜欢这个,因为编译比自己插入要容易得多。
  • 对我来说最大的问题是外部链接,完整的代码可能会包含很多不相关的代码/文档。对于调试和讨论,(在我看来)在文档的意义上拥有一个小而完整的例子更容易。
  • 外部代码也是一个最小的例子,专门用于显示这个问题,我现在已经包含了内联代码sn-ps :)

标签: c documentation doxygen doxygen-wizard doxygen-addtogroup


【解决方案1】:

看起来这里有很多问题。

  • doxygen 不知道扩展 cfg 并且仅将其添加到 FILE_PATTERNS 是不够的,并且编写它的语言必须让 doxygen 知道,所以 EXTENSION_MAPPING = cfg=C
  • test.cfg 中的变量末尾缺少分号 (;)。最后一行应为};
  • doxygen 不会将初始化中的注释视为记录某些内容(在当前版本 1.8.16 中也不考虑这一点)。问题是它属于哪里,因为 \todo 很明显它可以登陆 ToDo 页面,但它也应该与变量本身一起登陆吗?以及其他 cmets 怎么样(初始化现在是变量)。作为使用STRIP_CODE_COMMENTS=NO 时的旁注,该注释也不会显示在初始化中。

【讨论】:

  • 谢谢,非常感谢!您对缺少的分号是正确的。我现在还添加了 EXTENSION_MAPPING,我可以在终端中看到它现在将 .cfg 视为 c 语言。但是,我仍然没有在待办事项列表中看到任何一个待办事项。我明白你关于它属于哪里的观点,这是否也包括我的 cfg 文件中的顶级评论?那么我可以做些什么来将这些放在待办事项列表中吗?如果 doxygen 正在“跳过它们”,我猜想使用 ALIASES 的东西也行不通?与“myFunc”中的待办事项是否相同,因为它不属于任何特殊事物?
  • 对于 cfg 中的顶部 \todo,您可能可以做 2 件事:在 cfg 文件中添加 /// \file 后面加上一个空,或者您可以设置 EXTRACT_ALL=YES 虽然我认为 @987654331 @ 更好。带有 ALIASES 的东西确实不会给出解决方案。函数的\todo 是“给定”给函数的。我看到了 todo 的 12 和 17。
  • 谢谢。我现在已经更新到最新版本的 Doxygen,它解决了 todo12 的问题,我现在也进入了全局列表。我已经尝试了 \file 和 EXTRACT_ALL 方法,它们都没有将 todo 17 带入列表。 16现在还好。如果可能的话,我将使用 EXTRACT_ALL,因为添加 \file 很可能会被一些可能还没有那么专注于 doxygen 的开发人员忘记。所以现在,我只缺少 todo17,但你不是说不可能包括这个,因为它是在一个不属于某物的初始化中?
  • EXTRACT_ALL 的问题是一些警告将被禁止显示,否则会显示。
  • 我看到了 EXTRACT_ALL 和抑制的问题,也为我们未来在警告方面使用 Doxygen。你能详细说明一下 todo17,你说你进入了你的列表吗?不管我做什么,我仍然没有得到它。
猜你喜欢
  • 2012-10-29
  • 2018-12-07
  • 2012-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多