2

我在 CentOS 7 上的 NetBeans 8 中工作,以更改一些旧的 fortran 代码,以使用OpenAD的自动微分替换数值微分。OpenAD 将一个带注释的 fortran 函数作为输入,并生成一个自动微分函数作为输出。该输出功能取决于 OpenAD 提供的一些模块。

在将原始文件添加到 NetBeans 项目、生成 OpenAD 输出函数并将该输出及其依赖项添加到项目后,项目将不会构建。

Fatal Error: Can't open module file 'oad_active.mod' for reading at (1): No such file or directory

OAD_active.f90是 OpenAD 插入和提供的依赖项之一。如果我先编译该文件,然后构建项目(不清理),则构建成功。

如何告诉 NetBeans 在构建过程中尽快编译 OAD_active.f90?

4

1 回答 1

3

NetBeans 没有编译顺序,它创建Makefile表示依赖关系图的 s。默认图表只是最终的可执行文件,具体取决于您的每个来源。

可以通过 Projects 选项卡中每个源的上下文菜单添加每个源的附加依赖项;选择“属性”,然后在类别中选择“Fortran 编译器”,输入部分包含附加依赖项字段。该字段是一个以空格分隔的列表。您可能希望将配置选择器(在“文件属性”对话框的顶部)更改为“<All Configurations>”。如果没有 Projects 选项卡,可以从菜单栏项 Window ▶︎ Projects 打开它。

为了让编译器找到一个.mod文件,Additional Dependencies 字段必须包含相应的.o文件,而不是源文件。Additional Dependencies 中的条目似乎是相对于项目根目录的路径;文件的路径.o取决于哪个配置处于活动状态(默认情况下,“调试”或“发布”之一)。Makefile 变量允许在 Additional Dependencies 字段中使用,因此您可以使用${OBJECTDIR}配置相关前缀,并且路径的其余部分与源文件的路径匹配。

在我的项目中,我有我的源代码$project/src和 .OpenAD 文件$project/src/OpenAD。在三种情况下,我必须添加附加依赖项:

  • 调用 OpenAD 转换的函数的来源:${OBJECTDIR}/src/OpenAD/OAD_active.o
  • OpenAD 转换生成的源:${OBJECTDIR}/src/OpenAD/OAD_active.o ${OBJECTDIR}/src/OpenAD/w2f__types.o
  • $project/src/OpenAD/OAD_active.f90:${OBJECTDIR}/src/OpenAD/w2f__types.o
于 2015-07-29T16:58:37.110 回答