【问题标题】:C++ Doxygen - why are only template classes generating documentation?C++ Doxygen - 为什么只有模板类生成文档?
【发布时间】:2016-12-07 03:00:09
【问题描述】:

如果我在标题中声明一个类,不会生成Doxygen 条目。如果我定义类,仍然在标题中,则会生成一个条目。但是,无论我使用@brief 还是QT autobrief@class/@struct/ 等,以及////**/\**! 等的任何变体,似乎只有模板化的类可以生成正确的文档(包括简介)。并且找不到任何有所作为的东西。我还尝试添加一些我认为不相关的标签,例如@file;然后我打开EXTRACT_ALL,尝试OPTIMIZE_OUTPUT_FOR_C等。

不需要以任何方式使用模板参数本身来生成文档。实际上,与非模板版本不同,模板结构只需要声明一个条目及其简要描述即可。

我错过了什么?我是 Doxygen 的新手,不太确定哪些细节是相关的。

...
BRIEF_MEMBER_DESC      = YES
REPEAT_BRIEF           = YES
ABBREVIATE_BRIEF       =
ALWAYS_DETAILED_SEC    = NO
INLINE_INHERITED_MEMB  = NO
FULL_PATH_NAMES        = YES
STRIP_FROM_PATH        =
STRIP_FROM_INC_PATH    =
SHORT_NAMES            = NO
JAVADOC_AUTOBRIEF      = NO
QT_AUTOBRIEF           = YES
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS           = YES
SEPARATE_MEMBER_PAGES  = NO
TAB_SIZE               = 4
ALIASES                =
TCL_SUBST              =
OPTIMIZE_OUTPUT_FOR_C  =
OPTIMIZE_OUTPUT_JAVA   = NO
OPTIMIZE_FOR_FORTRAN   = NO
OPTIMIZE_OUTPUT_VHDL   = NO
EXTENSION_MAPPING      =
MARKDOWN_SUPPORT       = YES
AUTOLINK_SUPPORT       = YES
BUILTIN_STL_SUPPORT    = YES
CPP_CLI_SUPPORT        = NO
SIP_SUPPORT            = NO
IDL_PROPERTY_SUPPORT   = YES
DISTRIBUTE_GROUP_DOC   = NO
SUBGROUPING            = YES
INLINE_GROUPED_CLASSES = NO
INLINE_SIMPLE_STRUCTS  = NO
TYPEDEF_HIDES_STRUCT   = NO
LOOKUP_CACHE_SIZE      = 0
EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = YES
EXTRACT_PACKAGE        = YES
EXTRACT_STATIC         = NO
EXTRACT_LOCAL_CLASSES  = YES
EXTRACT_LOCAL_METHODS  = NO
EXTRACT_ANON_NSPACES   = NO
HIDE_UNDOC_MEMBERS     = NO
HIDE_UNDOC_CLASSES     = NO
HIDE_FRIEND_COMPOUNDS  = NO
HIDE_IN_BODY_DOCS      = NO
INTERNAL_DOCS          = NO
CASE_SENSE_NAMES       = YES
HIDE_SCOPE_NAMES       = NO
SHOW_INCLUDE_FILES     = YES
SHOW_GROUPED_MEMB_INC  = NO
FORCE_LOCAL_INCLUDES   = NO
INLINE_INFO            = YES
SORT_MEMBER_DOCS       = YES
SORT_BRIEF_DOCS        = NO
SORT_MEMBERS_CTORS_1ST = NO
SORT_GROUP_NAMES       = NO
SORT_BY_SCOPE_NAME     = NO
STRICT_PROTO_MATCHING  = NO
GENERATE_TODOLIST      = YES
GENERATE_TESTLIST      = YES
GENERATE_BUGLIST       = YES
GENERATE_DEPRECATEDLIST= YES
ENABLED_SECTIONS       =
MAX_INITIALIZER_LINES  = 30
SHOW_USED_FILES        = YES
SHOW_FILES             = YES
SHOW_NAMESPACES        = YES
FILE_VERSION_FILTER    =
LAYOUT_FILE            =
CITE_BIB_FILES         =
QUIET                  = NO
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = YES
WARN_IF_DOC_ERROR      = YES
WARN_NO_PARAMDOC       = NO
WARN_FORMAT            = "$file:$line: $text"
WARN_LOGFILE           =
INPUT                  = ../include ../README.md
INPUT_ENCODING         = UTF-8
FILE_PATTERNS          =
RECURSIVE              = YES
EXCLUDE                = ../include/util/
EXCLUDE_SYMLINKS       = NO
EXCLUDE_PATTERNS       =
EXCLUDE_SYMBOLS        =
EXAMPLE_PATH           =
EXAMPLE_PATTERNS       =
EXAMPLE_RECURSIVE      = NO
IMAGE_PATH             =
INPUT_FILTER           =
FILTER_PATTERNS        =
FILTER_SOURCE_FILES    = NO
FILTER_SOURCE_PATTERNS =
USE_MDFILE_AS_MAINPAGE = ../README.md
SOURCE_BROWSER         = NO
INLINE_SOURCES         = NO
STRIP_CODE_COMMENTS    = YES
REFERENCED_BY_RELATION = NO
REFERENCES_RELATION    = NO
REFERENCES_LINK_SOURCE = YES
SOURCE_TOOLTIPS        = YES
USE_HTAGS              = NO
VERBATIM_HEADERS       = YES
CLANG_ASSISTED_PARSING = NO
CLANG_OPTIONS          =
...

【问题讨论】:

    标签: c++ templates doxygen


    【解决方案1】:

    这一行看起来很可疑,就像您根本不允许 doxygen 处理您的实现文件一样。难怪只有在标题中定义的项目才会显示出来。

    INPUT                  = ../include ../README.md
    

    【讨论】:

    • 没错,但我说的是标题中的声明和定义。添加不相关的源文件会有所帮助,还是必须将定义放在源文件中才能解析 cmets?如果是这样,为什么这不适用于模板结构?对不起,如果这很明显。我的MO通常是在一个标头中前向声明结构,在“子标头”中定义它们及其成员,并将每个结构的实现放在源代码中。到目前为止,我只对向前向声明添加文档感兴趣,尽管其他一切最终都会发生。
    • 如果你能解释为什么会这样由 Doxygen 提供,但不是无模板的,无论它是否在头文件中。
    • @JohnP:我想我更多的是考虑成员而不是类型本身,所以我的回答可能实际上并不能解决你的问题。无论如何,没有模板类前向声明​​之类的东西。模板的第一个定义可能缺少类主体,但它仍然定义了模板——它的模板参数和每个模板的默认值——并且这个定义已经允许使用和专门化(由于两阶段查找)。
    • @JohnP:简而言之,我认为将其视为“模板类”与非模板类是错误的。 Doxygen 看到一个完全定义的模板,因此为该模板发出文档。没有给出类主体的事实是无关紧要的,因为文档不适用于该类。它用于模板本身。
    • 为什么恰好位于标头中的完全定义(非模板)类有什么不同?我可以接受定义的存在是差异而不是模板组件,但我认为我仍然缺少一些东西。感谢您的耐心等待!
    猜你喜欢
    • 2015-01-14
    • 2011-02-25
    • 2014-08-09
    • 2015-10-26
    • 2020-06-17
    • 2018-06-07
    • 1970-01-01
    • 2014-05-01
    • 2014-05-18
    相关资源
    最近更新 更多