在两个目录中我有两个不同的,独立的Fortran 90程序,我希望它们共享某些使用模块中定义的变量的例程。换句话说,我有一个带有程序prgA.f90的目录dirA和一个额外文件sub.f90中的几个例程,这些例程使用文件modA中模块的一些东西。他们都住在dirA。在另一个目录,dirB,我有独立代码prgB.f90,它应该使用sub.f90中的例程,因此需要模块来定义它所需的东西。由于技术原因,我不能直接在dirA中使用modA中的模块,而是编写它的变体modB,它具有相同的模块名称,并包含与modA中名称相同的感兴趣的变量以及仅由PRGB。来自sub.f90的例程是否可以在prgA的可执行文件中使用modA,在prgB的可执行文件中使用modB? 我已经部分尝试调整我的代码,并且编译器似乎以某种方式接受它,但是我不确定它是否真的有效并且尽管编译似乎没有产生垃圾结果。
基本上问题是:如果我确保模块具有相同的名称并且具有共同的变量子集,那么我可以共享在不同程序之间使用某些模块的函数吗?或者函数的模块USEd必须是精确的这两个项目都一样吗?
托马斯
答案 0 :(得分:0)
如果我理解正确,那你正在做的就好了。
当您构建progA
时,编译器在处理sub.f90
时遇到use globals
之类的语句。此时,编译器将查找名为globals.mod
的文件,到那时,它应该通过编译模块源来创建。当然,该模块源不必位于名为globals.f90
的文件中,但这既不是在这里也不是在那里。例如,模块源可能位于名为globals_for_a.f90
的文件中。
当您构建progB
时,编译器在处理sub.f90
时遇到use globals
之类的语句。此时,编译器将查找名为globals.mod
的文件,到那时,它应该通过编译模块源来创建。当然,该模块源不必位于名为globals.f90
的文件中,但这既不是在这里也不是在那里。例如,模块源可能位于名为globals_for_b.f90
的文件中。
只要每个程序的编译找到globals.mod
的正确来源,一切都应该按照您的意愿编译。您已选择将源文件划分为多个目录,但这并非严格必要;具有适当定义目标的make文件可以构建任一程序,也可以构建源文件和目录。
请注意,几乎所有这些都超出了Fortran标准的关注范围,更多的是编译器和编译工作的问题。