【问题标题】:Doxygen MACRO_EXPANSION not working at allDoxygen MACRO_EXPANSION 根本不工作
【发布时间】:2020-11-23 14:20:31
【问题描述】:

我正在使用 doxygen 1.8.20

相关配置:

INPUT                  = @CMAKE_CURRENT_SOURCE_DIR@
ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES
EXPAND_ONLY_PREDEF     = NO
SEARCH_INCLUDES        = YES
INCLUDE_PATH           = @CMAKE_CURRENT_SOURCE_DIR@/../include\
                         @CMAKE_CURRENT_SOURCE_DIR@/include\  
                         @CMAKE_CURRENT_SOURCE_DIR@/src
INCLUDE_FILE_PATTERNS  =
PREDEFINED             =
EXPAND_AS_DEFINED      = 
SKIP_FUNCTION_MACROS   = NO

定义的宏:

#define BEGIN_NS(NS) namespace NS {
#define END_NS(NS) /* NS */ }

宏观用法:

BEGIN_NS(xyz::core)

class X { ... };

END_NS(xyz::core)
  • 文档中未生成命名空间
  • X 类页面没有显示 X 类的命名空间
  • 许多这样的警告:警告:找到';'在解析初始化列表时! (doxygen 可能会被不带分号的宏调用混淆)
  • 函数宏调用被记录为函数定义,而不是被正确扩展和记录

** 编辑 **

doxygen -x 的结果

# Difference with default Doxyfile 1.8.20
PROJECT_NAME           = "XXXX Library"
OUTPUT_DIRECTORY       = project/../build/docs
TOC_INCLUDE_HEADINGS   = 0
EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = YES
EXTRACT_PACKAGE        = YES
EXTRACT_STATIC         = YES
WARN_IF_UNDOCUMENTED   = NO
INPUT                  = project
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 \
                         *.f95 \
                         *.f03 \
                         *.f08 \
                         *.f \
                         *.for \
                         *.tcl \
                         *.vhd \
                         *.vhdl \
                         *.ucf \
                         *.qsf
RECURSIVE              = YES
VERBATIM_HEADERS       = NO
MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
GENERATE_LATEX         = NO
LATEX_CMD_NAME         = latex
GENERATE_XML           = YES
MACRO_EXPANSION        = YES
INCLUDE_PATH           = project
SKIP_FUNCTION_MACROS   = NO
HAVE_DOT               = YES

【问题讨论】:

  • 使用时很容易给出命令doxygen -x,因此您可以了解标准 doxygen 设置和使用的设置之间的差异,请发布此列表。此外,请创建一个完整的小示例,以便我们尝试重现问题。

标签: doxygen


【解决方案1】:

我使用了与您相同的以下设置:

设置:

# Difference with default Doxyfile 1.8.20
PROJECT_NAME           = "XXXX Library"
TOC_INCLUDE_HEADINGS   = 0
EXTRACT_ALL            = YES
EXTRACT_PRIVATE        = YES
EXTRACT_PACKAGE        = YES
EXTRACT_STATIC         = YES
WARN_IF_UNDOCUMENTED   = NO
VERBATIM_HEADERS       = NO
MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
GENERATE_LATEX         = NO
GENERATE_XML           = YES
MACRO_EXPANSION        = YES
INCLUDE_PATH           = .
SKIP_FUNCTION_MACROS   = NO
HAVE_DOT               = YES
QUIET=YES
/// \file

文件 aa.h

#define BEGIN_NS(NS) namespace NS {
#define END_NS(NS) /* NS */ }

BEGIN_NS(xyz::core)

class X { ... };

END_NS(xyz::core)
/// \file

文件 bb.h

#define BEGIN_NS1(NS1) namespace NS1 {
#define END_NS1(NS1) /* NS1 */ }

和文件 bb1.h

/// \file

#include "bb.h"

BEGIN_NS1(xyz1::core1)

class X1 { ... };

END_NS1(xyz1::core1)

我得到了结果:

我们看到这里缺少这个类,在当前的 master (1.9.0 (4e75d77f60bd173019247177686376ce36ace90b)) 中存在这个类:

这是你的意思还是我错过了什么?

【讨论】:

  • 就我而言,命名空间部分根本没有出现。我现在不能拍快照,但我稍后会发布更多信息。
  • 也试试我的情况,看看结果如何。
猜你喜欢
  • 1970-01-01
  • 2016-10-29
  • 2018-02-10
  • 2017-03-19
  • 2013-09-20
  • 2013-11-08
  • 2015-08-23
  • 2017-10-14
  • 1970-01-01
相关资源
最近更新 更多