将单独文件中的多个模块编译为Windows 7中Intel Fortran ifort中的一个obj文件

时间:2015-01-09 17:53:43

标签: fortran fortran90 intel-fortran

我曾经在一个名为umat.f90的文件中执行

!!! umat.f90
module1
!! Content of module1
end module1


module2
!! Content of module2
end module2


!! This has to be a subroutine to interface with some legacy code in a software called ABAQUS
subroutine umat (argument-list)
use module1
use module2
!! Content of umat
end subroutine umat

这很有效。我可以使用ifort -c umat.f90,然后生成umat.obj链接到名为ABAQUS的软件(我无法修改)。现在,由于可以重复使用module1module2,因此我希望将它们保存在单独的.f90文件中,以符合DRY原则。因此,这将成为三个单独的文件:

文件#1:

!!! module1.f90
module1
!! Content of module1
end module1

文件#2:

!!! module2.f90
module2
!! Content of module2
end module2

文件#3:

!!! umat.f90
!! This has to be a subroutine to interface with some legacy code in a software called ABAQUS
subroutine umat (argument-list)
use module1
use module2
!! Content of umat
end subroutine umat

但是,现在如果我运行ifort /c module1.f90 module2.f90 umat.f90,它将生成3个obj文件。 umat.obj似乎不再包含module1module2的模块信息。

鉴于我只能提供一个.obj文件与ABAQUS接口,我可以将它们编译成一个大的.obj文件吗?

PS:我知道我可以使用python脚本来复制&每次自动将三个文件粘贴到一个文件中,但这似乎是一种非常肮脏和不优雅的方式。

1 个答案:

答案 0 :(得分:0)

我还没有对此进行过测试,但我阅读了ifort文档,/Qipo[n]选项可能会有效。来自this

  

/ Qipo [n]的       此选项启用文件之间的过程间优化。 n 是一个可选的整数,指定编译器应创建的目标文件的数量。整数必须大于或等于0.如果n大于0,编译器将生成n个目标文件,除非n超过源文件数(m),在这种情况下编译器只生成m个目标文件。

例如:ifort /Qipo[1] /c module1.f90 module2.f90 umat.f90

希望它有效!