Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Fortran 如何让doxygen查看.F90文件中预处理器宏的文档?_Fortran_Doxygen - Fatal编程技术网

Fortran 如何让doxygen查看.F90文件中预处理器宏的文档?

Fortran 如何让doxygen查看.F90文件中预处理器宏的文档?,fortran,doxygen,Fortran,Doxygen,我正在使用ParallelIO库,这是一个用于高性能计算(HPC)I/O的自由软件库,具有类似netCDF的API 在一些fortran代码中,我有一个名为piolib_mod.F90的文件,该文件启动: !> !! @file !! @brief Initialization Routines for PIO #define __PIO_FILE__ "piolib_mod.F90" 这会产生强氧警告: /home/ed/tmp/ParallelIO/src/flib/piolib_m

我正在使用ParallelIO库,这是一个用于高性能计算(HPC)I/O的自由软件库,具有类似netCDF的API

在一些fortran代码中,我有一个名为piolib_mod.F90的文件,该文件启动:

!>
!! @file
!! @brief Initialization Routines for PIO
#define __PIO_FILE__ "piolib_mod.F90"
这会产生强氧警告:

/home/ed/tmp/ParallelIO/src/flib/piolib_mod.F90:4: warning: Member __PIO_FILE__ (macro definition) of file piolib_mod.F90 is not documented.
但无论我做什么,我都不能接受我对这个宏文档的定义。我试过:

!> for debugging
#define __PIO_FILE__ "piolib_mod.f90"
此外:

我已尝试从doxygen处理中排除此行:

!> @cond exclude
#define __PIO_FILE__ 'piodarray'
!> @endcond
但这也不起作用

Doxygen可能会被Fortran文件中预处理器宏的概念弄糊涂,但对你来说,那只是21世纪,是20世纪60年代昂贵的超级计算机和编程语言


如何使用doxygen记录此预处理器定义?

我完成此操作的方法是将*.F90文件预处理为*.F90文件,然后将*.F90文件用于doxygen

下面是Makefile.am中的技巧:

# Doxygen does not cope well with pre-processor use in Fortran. So
# create .f90 files from .F90 files by running the C
# pre-processor. These will only be used by doxygen when --enable-docs
# is used at configure.
if BUILD_DOCS
BUILT_SOURCES += piodarray.f90 piolib_mod.f90 pionfatt_mod.f90 pionfget_mod.f90 pionfput_mod.f90 pionfatt_mod_2.f90 pionfget_mod_2.f90
piodarray.f90: piodarray.F90
    $(CC) -E $< > $@
piolib_mod.f90: piolib_mod.F90
    $(CC) -E $< > $@
pionfatt_mod.f90: pionfatt_mod.F90
    $(CC) -E $< > $@
pionfget_mod.f90: pionfget_mod.F90
    $(CC) -E $< > $@
pionfput_mod.f90: pionfput_mod.F90
    $(CC) -E $< > $@

这一切都很有效,现在我有了一个干净的doxygen版本,没有任何警告。;-)

是因为doxygen只在扩展名为(.F90而不是.F90)的fortran文件上运行预处理器吗?我使用的文件扩展名为.F90,因此正在运行预处理器。预处理器/预处理器指令不是fortran标准的一部分(据我所知)我认为这就是无法记录它们的原因。我看到了关于“\cond”的编辑,所以我做了一些测试。问题似乎是针对
.F90
文件的,仅为了测试(!!),使用
.F90
创建了相同的文件。没有给出警告,也没有显示定义(有和没有
\cond
)。Fortran文件的预处理似乎有问题(除了将文件重命名为小写的
.f90
文件外,在doxygen中没有其他选项可禁用预处理)。请在doxygen问题跟踪程序中提交问题报告:
# Doxygen does not cope well with pre-processor use in Fortran. So
# create .f90 files from .F90 files by running the C
# pre-processor. These will only be used by doxygen when --enable-docs
# is used at configure.
if BUILD_DOCS
BUILT_SOURCES += piodarray.f90 piolib_mod.f90 pionfatt_mod.f90 pionfget_mod.f90 pionfput_mod.f90 pionfatt_mod_2.f90 pionfget_mod_2.f90
piodarray.f90: piodarray.F90
    $(CC) -E $< > $@
piolib_mod.f90: piolib_mod.F90
    $(CC) -E $< > $@
pionfatt_mod.f90: pionfatt_mod.F90
    $(CC) -E $< > $@
pionfget_mod.f90: pionfget_mod.F90
    $(CC) -E $< > $@
pionfput_mod.f90: pionfput_mod.F90
    $(CC) -E $< > $@
# If building docs, process Doxyfile.in into Doxyfile.
if test "x$enable_docs" = xyes; then
   AC_SUBST([CMAKE_CURRENT_SOURCE_DIR], ["."])
   AC_SUBST([CMAKE_BINARY_DIR], [".."])
   if test "x$enable_fortran" = xno; then
      AC_MSG_ERROR([--enable-fortran is required for documentation builds.])
   fi
   AC_SUBST([FORTRAN_SRC_FILES], ["../src/flib/piodarray.f90  ../src/flib/pio.F90  ../src/flib/pio_kinds.F90  ../src/flib/piolib_mod.f90  ../src/flib/pionfatt_mod_2.f90  ../src/flib/pio_nf.F90  ../src/flib/pionfget_mod_2.f90  ../src/flib/pionfput_mod.f90  ../src/flib/pio_support.F90  ../src/flib/pio_types.F90"])
   if test "x$enable_developer_docs" = xyes; then
      AC_SUBST([C_SRC_FILES], ["../src/clib"])
   else
      AC_SUBST([C_SRC_FILES], ["../src/clib/pio_nc.c ../src/clib/pio_nc4.c ../src/clib/pio_darray.c ../src/clib/pio_get_nc.c ../src/clib/pio_put_nc.c ../src/clib/pioc_support.c ../src/clib/pioc.c ../src/clib/pio_file.c ../src/clib/pio.h"])
   fi
   AC_CONFIG_FILES([doc/Doxyfile])
fi