我在Windows下(如obj扩展名所示)。
我有两个有效的.f90文件A.f90
和B.f90
(放在同一文件夹中)提供给我,其中B.f90
使用A.f90
,{{ 1}}正在:
B.f90
module B
use A
! ... stuff
的代码是
A.f90
我使用以下命令编译module A
! ... stuff
:
A.f90
现在,我想在对ifort -c -fpp A.f90
,即其B.f90
文件进行重读时编译A.f90
。
所以我尝试了:
.obj
抛出
ifort:警告#10145:文件'A.obj'没有执行任何操作 在我身上。
是命令
ifort -c B.f90 A.obj
是否在编译ifort -c B.f90
即文件B.f90
的过程中是否正确编译A.f90
?
我希望.obj
可以“按B.f90
的形式进行编译,因为实际上我有第三个A.f90
(包含C.f90
),并且在最后,我必须运行命令:
use B
在链接到A,B,C的所有目标文件时编译dll。
答案 0 :(得分:1)
编译器用来编译文件A
所需的有关模块B.f90
的信息不在文件A.f90
中,而是在文件A.mod
中(模块名,后跟.mod
扩展名)。默认情况是在运行.mod
的目录中创建ifort
文件并从中读取文件。因此,如果按照正确的顺序编译文件(执行操作),并且在编译所有这些文件时从同一目录运行ifort
,它将有权访问先前编译的模块文件,并且一切正常可以使用简单的命令(例如
ifort -c B.f90
如果在编译时,编译器无权访问当前编译的文件中use
中的模块的模块文件,则会发出错误,并且编译将中止。