我很乐意制作我们的大项目http://www.diracprogram.org的代码文档,它是F90
,F77
,Fortran包含文件,C
和C++
源代码文件。加上很多预处理器语句(主要在Fortran文件中)。
我正在使用Doxygen 1.8.6
,并使用Doxygen.in配置文件和doxygen调试语句。
Fortran是主要语言。
如您所见,存在很多错误。有任何线索如何跟踪,理解它们然后相应地调整Fortran源文件?
********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/utils/mx2fit.F90 line: 621, state: 21
********************************************************************
********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/utils/polfit.F90 line: 168, state: 21
********************************************************************
********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/utils/twofit.F90 line: 310, state: 21
********************************************************************
********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/amfi/amfi3.F line: 2824, state: 4
********************************************************************
********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/cc_external/hsfscc/chp_11a.F90 line: 1993, state: 21
********************************************************************
parse error in end <scopename>********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/dirac/dirbss.F line: 7884, state: 6
********************************************************************
/home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/include/dcbgascip.h:37: warning: Found ';' while parsing initializer list! (doxygen could be confused by a mac
ro call without semicolon)
/home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/include/dcbham.h:50: warning: Found ';' while parsing initializer list! (doxygen could be confused by a macro
call without semicolon)
parse error in end <scopename>********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/krmc/krmcgascip.F line: 4684, state: 6
********************************************************************
********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/reladc/adccore.F line: 7170, state: 19
********************************************************************
********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/reladc/adcdble.F line: 2871, state: 10
********************************************************************
********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/reladc/adcdiag.F line: 4813, state: 10
********************************************************************
********************************************************************
Error in file /home/ilias/Dokumenty/Work/QCH/software/dirac_git/working_trunk/src/reladc/adcexci.F line: 1995, state: 10
********************************************************************
make[3]: *** [CMakeFiles/doxygen] Segmentation fault (core dumped)
make[3]: Target `CMakeFiles/doxygen.dir/build' not remade because of errors.
make[2]: *** [CMakeFiles/doxygen.dir/all] Error 2
make[1]: *** [CMakeFiles/doxygen.dir/rule] Error 2
make[1]: Target `doxygen' not remade because of errors.
make: *** [doxygen] Error 2
答案 0 :(得分:0)
首先我假设代码编译正确。
建议升级到最新版本的doxygen(目前为1.8.8),因为可能会解决许多问题。
追踪的最佳方式是(不幸的是,在状态错误的情况下,报告的行号在大多数情况下是没有用的): - 研究doxygen代码 - 对于每个文件分别运行doxygen并试图通过例如解决问题减少文件直到错误消失,并从中得出结论错误。 - 自己构建doxygen并在调试模式下使用flex运行/添加打印语句
对于每条* .F90线,您应该在输出线中看到类似于:
每个* .f90文件的Preprocessing .../a.F90... Parsing file .../a.F90...
:
每个* .F文件Reading .../a.f90... Parsing file .../a.f90...
:
每个* .f文件Preprocessing .../a.F... Prepassing fixed form of .../a.F Parsing file ...a.F...
:
Reading .../a.f... Prepassing fixed form of .../a.f Parsing file .../a.f...
如果不是这种情况,文件将无法正确识别为自由格式化的Fortran /固定格式化代码,并且doxygen可能会混淆。 这可以通过在Doxyfile中定义来实现:
EXTENSION_MAPPING = f=FortranFixed f90=FortranFree
(这可能是自doxygen 1.8.7版本以来) 如果不可能,则在* .f / .F文件的第一行的第一列中设置'C'。 'c'或''。
在www.diracprogram.org的网站上我找不到源代码,是否可以共享(部分?)。
现在关于不同的状态,它们来自fortranscanner.l(我必须猜测一个解决方案):
州:4
SubprogBody:可能是因为在固定格式的代码中未正确关闭/识别子程序体(因为它是.F文件,所以添加'C'......)
州:6
开始:可能是由于未在固定格式化代码中正确关闭/识别启动条件(因为它是.F文件,因此添加'C'......)
州:10
ModuleBody:可能是因为没有在固定格式化代码中正确关闭/识别模块体(因为它是.F文件,所以添加'C'......)
州:19
InterfaceBody:可能是由于固定格式化代码中没有正确关闭/识别的界面(因为它是.F文件,所以添加'C'......)
州:21
字符串:字符串未正确关闭字符串或字符串引号中的某处注释