Doxygen正在生成空的文档。

11

我有一个用C++(和一些CUDA)编写的源代码存储库,我想要使用doxygen进行注释。我已经为部分代码添加了doxygen注释;生成了Doxygen配置文件,并使用它运行doxygen以查看部分输出。

但是我得到的结果是:什么也没有。空的。

生成了一个主页,但它没有显示任何内容——即使我明确设置了EXTRACT_ALL = YES(在使用EXTRACT_ALL = NO获得空结果后)。

为什么没有生成任何内容,我该如何解决?

备注:

  • 所有头文件都有@file注释。
  • 我已经将与CUDA相关的扩展添加到允许的模式中。
  • 我之前有一个版本的这个问题,没有得到答案,现在情况有所改变(所以我删除了那个版本)。
  • 即使从doxygen.cfg中删除大多数行(见下文),问题仍然存在。


doxygen.cfg(较短版,过滤掉了注释):

DOXYFILE_ENCODING      = UTF-8
PROJECT_NAME           = "cuda-api-wrappers"
PROJECT_BRIEF          = "Thin C++-flavored wrappers for the CUDA Runtime API"
OUTPUT_DIRECTORY       = docs
ALLOW_UNICODE_NAMES    = YES
OUTPUT_LANGUAGE        = English
BRIEF_MEMBER_DESC      = YES
REPEAT_BRIEF           = YES
FULL_PATH_NAMES        = YES
JAVADOC_AUTOBRIEF      = YES
QT_AUTOBRIEF           = NO
MULTILINE_CPP_IS_BRIEF = NO
INHERIT_DOCS           = YES
SEPARATE_MEMBER_PAGES  = NO
TAB_SIZE               = 4
EXTENSION_MAPPING      = cu=C++ cuh=C++ cuhpp=C++ hpp=C++
MARKDOWN_SUPPORT       = YES
AUTOLINK_SUPPORT       = YES
BUILTIN_STL_SUPPORT    = YES
SUBGROUPING            = YES
LOOKUP_CACHE_SIZE      = 2
EXTRACT_ALL            = YES
EXTRACT_LOCAL_CLASSES  = YES
HIDE_UNDOC_MEMBERS     = NO
HIDE_UNDOC_CLASSES     = NO
HIDE_FRIEND_COMPOUNDS  = NO
CASE_SENSE_NAMES       = YES
HIDE_SCOPE_NAMES       = NO
HIDE_COMPOUND_REFERENCE= NO
SHOW_INCLUDE_FILES     = YES
SHOW_GROUPED_MEMB_INC  = NO
FORCE_LOCAL_INCLUDES   = NO
INLINE_INFO            = YES
SORT_MEMBER_DOCS       = YES
STRICT_PROTO_MATCHING  = NO
MAX_INITIALIZER_LINES  = 30
SHOW_USED_FILES        = YES
SHOW_FILES             = YES
SHOW_NAMESPACES        = YES
QUIET                  = NO
WARNINGS               = YES
WARN_IF_UNDOCUMENTED   = YES
WARN_IF_DOC_ERROR      = YES
WARN_NO_PARAMDOC       = NO
WARN_AS_ERROR          = NO
WARN_FORMAT            = "$file:$line: $text"
INPUT                  = src
INPUT_ENCODING         = UTF-8
FILE_PATTERNS          = *.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, *.qsf, *.as *.js, *.cuh, *.cu, *.cuhpp
RECURSIVE              = YES

Doxygen控制台输出:

Adding custom extension mapping: .cu will be treated as language c++
Adding custom extension mapping: .cuh will be treated as language c++
Adding custom extension mapping: .cuhpp will be treated as language c++
Adding custom extension mapping: .hpp will be treated as language c++
Searching for include files...
Searching for example files...
Searching for images...
Searching for dot files...
Searching for msc files...
Searching for dia files...
Searching for files to exclude
Searching INPUT for files to process...
Searching for files in directory /home/eyalroz/src/mine/cuda-api-wrappers/src
Searching for files in directory /home/eyalroz/src/mine/cuda-api-wrappers/src/cuda
Searching for files in directory /home/eyalroz/src/mine/cuda-api-wrappers/src/cuda/api
Reading and parsing tag files
Parsing files
Building group list...
Building directory list...
Building namespace list...
Building file list...
Building class list...
Associating documentation with classes...
Computing nesting relations for classes...
Building example list...
Searching for enumerations...
Searching for documented typedefs...
Searching for members imported via using declarations...
Searching for included using directives...
Searching for documented variables...
Building interface member list...
Building member list...
Searching for friends...
Searching for documented defines...
Computing class inheritance relations...
Computing class usage relations...
Flushing cached template relations that have become invalid...
Creating members for template instances...
Computing class relations...
Add enum values to enums...
Searching for member function documentation...
Building page list...
Search for main page...
Computing page relations...
Determining the scope of groups...
Sorting lists...
Freeing entry tree
Determining which enums are documented
Computing member relations...
Building full member lists recursively...
Adding members to member groups.
Computing member references...
Inheriting documentation...
Generating disk names...
Adding source references...
Adding xrefitems...
Sorting member lists...
Computing dependencies between directories...
Generating citations page...
Counting data structures...
Resolving user defined references...
Finding anchors and sections in the documentation...
Transferring function references...
Combining using relations...
Adding members to index pages...
Generating style sheet...
Generating search indices...
Generating example documentation...
Generating file sources...
Generating file documentation...
Generating page documentation...
Generating group documentation...
Generating class documentation...
Generating namespace index...
Generating graph info page...
Generating directory documentation...
Generating index page...
Generating page index...
Generating module index...
Generating namespace index...
Generating namespace member index...
Generating annotated compound index...
Generating alphabetical compound index...
Generating hierarchical class index...
Generating graphical class hierarchy...
Generating member index...
Generating file index...
Generating file member index...
Generating example index...
finalizing index lists...
writing tag file...
Running dot...
lookup cache used 127/262144 hits=628 misses=194
finished...

2
请发布您使用的Doxyfile(doxygen.cfg),因为它似乎不正确,链接可能会失效。 - albert
2
这是一个“为什么这段代码不起作用”的问题。这些问题应该在问题本身中有一个[mcve]。 - Robert Crovella
2
看起来 FILE_PATTERN 中不应该有逗号(,),它是一个以空格分隔的列表,现在逗号被添加到文件扩展名中了。 - albert
1
@albert:就是这样!太棒了!如果你愿意,随便发一个回答,我会接受的。 - einpoklum
1
我最近向doxygen github(pull request 6563,https://github.com/doxygen/doxygen/pull/6563)推送了一个建议的补丁,并已集成到主分支中。该pull request是为了在列表中启用逗号。 - albert
显示剩余7条评论
1个回答

9

简而言之:在FILE_PATTERNS变量中放弃逗号,改为空格分隔。

不要这样做:

FILE_PATTERNS          = *.c, *.cc, *.cxx, *.etc

您应该使用:
FILE_PATTERNS          = *.c *.cc *.cxx *.etc

解释

@albert 是破解这个难题的人...

由Doxygen生成的配置文件说:

# If the value of the INPUT tag contains directories, you can use the
# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
# *.h) to filter out the source-files in the directories.
#
# Note that for custom extensions or not directly supported extensions you also
# need to set EXTENSION_MAPPING for the extension otherwise the files are not
# read by doxygen.
#
# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp,
# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h,
# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc,
# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f, *.for, *.tcl,
# *.vhd, *.vhdl, *.ucf, *.qsf, *.as and *.js.

FILE_PATTERNS          = 

这条评论是误导性的,因为它给出了一个用逗号分隔的列表,而实际上逗号并不被视为分隔符。如果你使用那个列表(也许添加/更改它),就像在OP的例子中一样,Doxygen会看到一个带有扩展名的模式列表,其中扩展名带有尾随字符。而且——它不会抱怨。它也不会抱怨忽略存储库中的所有文件——它最终只会得到一个空结果。
去掉,字符将导致生成的文档非空。
注意:从Doxygen版本1.8.15开始,这不再是一个问题,逗号应该被接受为字段的分隔符。

1
我最近向doxygen github(pull request 6563,https://github.com/doxygen/doxygen/pull/6563)推送了一个建议的补丁,并已集成到主分支中。该pull request是为了在列表中启用逗号。 - albert
@albert:你能告诉我们哪个doxygen版本首次集成了你的补丁吗? - einpoklum
1
从发布日期与集成日期相比,这给出了版本1.8.15。当查看更改日志(doxygen.nl/manual/changelog.html)并搜索拉取请求文本“在配置列表中启用逗号作为分隔符”时,这也给出了1.8.15。 - albert
1
@albert哇!已经是2021年了,在Ubuntu 16.04上运行sudo apt-get install doxygen,我得到的是Doxygen version 1.8.11!!然后运行sudo apt-get update,再次运行sudo apt-get install doxygen,结果显示doxygen is already the newest version (1.8.11-1ubuntu0.1).。现在看到你的修订历史,1.8.15似乎只是在2020年才被添加到你的答案中,所以情况并不那么糟糕 - Nike
@user1271772:你应该意识到Ubuntu 16.04包含的软件是2016年的,很可能其中大部分来自2015年末,对吧?...而且这种情况将在2022年、2023年甚至永远存在 :-P - einpoklum

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