在两个程序之间共享的例程中使用不同的模块变体

时间:2014-05-14 00:14:41

标签: module fortran90

在两个目录中我有两个不同的,独立的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必须是精确的这两个项目都一样吗?

托马斯

1 个答案:

答案 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标准的关注范围,更多的是编译器和编译工作的问题。