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
Hyperlink 自动链接到doxygen中方法参数描述中的Fortran类_Hyperlink_Fortran_Doxygen - Fatal编程技术网

Hyperlink 自动链接到doxygen中方法参数描述中的Fortran类

Hyperlink 自动链接到doxygen中方法参数描述中的Fortran类,hyperlink,fortran,doxygen,Hyperlink,Fortran,Doxygen,我试图让doxygen在方法的参数描述中自动生成到代码的另一个模块中的Fortran类的链接 比如说 是一个类子例程的html文档,它将自己的类和另一个模块中定义的另一个类作为参数 类InnerProducts的链接已正确自动创建,而类ModelConfiguration的链接未正确创建,我必须在说明中手动添加链接 下面是init_internal_products例程的标题,上面的链接中显示了该例程的html文档: !> Initialization routine for the i

我试图让doxygen在方法的参数描述中自动生成到代码的另一个模块中的Fortran类的链接

比如说

是一个类子例程的html文档,它将自己的类和另一个模块中定义的另一个类作为参数

InnerProducts
的链接已正确自动创建,而类
ModelConfiguration
的链接未正确创建,我必须在说明中手动添加链接

下面是
init_internal_products
例程的标题,上面的链接中显示了该例程的html文档:

!> Initialization routine for the inner products functions.
!> @param[in,out] inner_products Inner products global object to initialize
!> @param[in] model_config Global model configuration (params::modelconfiguration) object to initialize the inner products with
SUBROUTINE init_inner_products(inner_products, model_config)
  CLASS(InnerProducts), INTENT(INOUT), TARGET :: inner_products
  CLASS(ModelConfiguration), INTENT(IN), TARGET :: model_config
我希望避免手动链接,那么如何强制/配置doxygen尝试链接到外部模块中的类

编辑 最后,我没有发现任何名称冲突。我认为这是一个可能的解释,但事实并非如此。更奇怪的是,所有其他类在文档中都有很好的链接。在下面显示使用各种其他类的对象的详细信息的图片上,可以看到问题只发生在类
ModelConfiguration
上,我不知道为什么


以下是上述类别的定义:

!> The general class holding the model configuration.
TYPE, PUBLIC :: ModelConfiguration
  TYPE(PhysicsConfiguration) :: physics
  TYPE(ModesConfiguration) :: modes
  TYPE(IntegrationParameters) :: integration
  LOGICAL :: initialized = .FALSE.
CONTAINS
  PROCEDURE :: init => init_model_config       !< Model   configuration initialization routine
  PROCEDURE :: clean => clean_model_config     !< Model configuration cleaning routine
END TYPE ModelConfiguration
!>保存模型配置的通用类。
类型,PUBLIC::ModelConfiguration
类型(物理配置)::物理
类型(模式配置)::模式
类型(IntegrationParameters)::集成
逻辑::已初始化=.FALSE。
包含
过程::init=>init_model_config!<模型配置初始化例程
过程::clean=>clean_model_config!<模型配置清理例程
端类型模型配置

这是非常基本的。

问题只涉及我代码的类
ModelConfiguration
,我意识到它是唯一一个导入了
关键字的类。例如,在我问题的第二个图的类
Model
中,导入类
ModelConfiguration
,如下所示:

MODULE model_def
  USE params, only: ModelConfiguration
  ...
删除唯一的关键字(导入整个params模块)会使doxygen链接在文档中正确:


所以我猜这是由于doxygen中的一个bug(我使用的是doxygen当前的稳定版本1.8.13)。既然我可以导入整个模块,我就这样离开它。

我已经调查了doxygen中的问题

  • 该问题并非仅由
    关键字引起
如果我们有:

use Params
我们也会遇到同样的问题

由于Fortran不区分大小写,doxygen将所有代码(字符串除外)转换为小写,但在
USE
语句的情况下,还没有这样做。 已在github上提交了建议的修补程序:

解决方法是将
use
语句中的所有名称转换为小写


编辑建议的修补程序已集成到doxygen的主版本中。

doxygen的版本是什么?您是否设置了
OPTIMIZE\u FOR\u FORTRAN=YES
?您能否创建一个完整的示例?是的,它是为FORTRAN优化的,但现在我认为这是代码中的名称冲突,而不是Doxygen问题。我将尝试确认这一点。@albert无论如何,我将很快在github上发布这段代码,如果问题仍然存在,我将在此处添加链接。github链接的问题是它可能不会持久(因为github代码可能会更改),而且github上的问题将是“大”的,难以调试(帮助者必须投入更多的时间来找出问题!)。最好提取一个小例子来说明问题。有趣的观察结果!使用更新版本的doxygen(版本1.8.18或master)时会发生什么会很好。当然值得从doxygen方面进一步探索。