在 NetBeans 8 中更改 Fortran 编译顺序

Change fortran compile order in NetBeans 8

我正在 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?

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

可以通过“项目”选项卡中每个源的上下文菜单添加每个源的其他依赖项;选择 "Properties",然后在 Categories 中选择 "Fortran Compiler",Input 部分包含 Additional Dependencies 字段。该字段是一个 space 分隔的列表。您可能希望将配置选择器(在“文件属性”对话框的顶部)更改为“<所有配置>”。如果缺少“项目”选项卡,可以从菜单栏项目 Window ▶︎ 项目中打开它。

要让编译器找到 .mod 文件,Additional Dependencies 字段必须包含相应的 .o 文件,而不是源文件。 Additional Dependencies 中的条目似乎是相对于项目根目录的路径; .o 文件的路径取决于激活的配置(默认情况下,"Debug" 或 "Release" 之一)。 Additional Dependencies 字段中允许使用 Makefile 变量,因此您可以使用 ${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