Doxygen MACRO_EXPANSION 根本不工作

问题描述 投票:0回答:2

我正在使用 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 类的命名空间
  • 很多这样的警告:warning: Found ';'在解析初始化列表时! (没有分号的宏调用可能会混淆 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
2个回答
0
投票

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

设置:

# 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)) 中存在类:

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


0
投票

我遇到了同样的问题,并通过在 INCLUDE_PATH 中添加输入目录解决了这个问题。出于某种原因,INPUT 目录似乎没有在 doxygen 1.9.6 上用作 INCLUDE_PATH。也许这里也有你的问题(@CMAKE_CURRENT_SOURCE_DIR@?)

© www.soinside.com 2019 - 2024. All rights reserved.