在创建Fortran 90共享库时,如何安排它以便我可以访问库使用的模块?

时间:2014-05-21 18:24:00

标签: fortran fortran90

我正在创建一个Fortran 90共享库及其Python绑定。我需要对其进行调整,以便用户在使用Fortran和Python时可以访问共享库的模块。

Python部分很简单,我将创建签名文件并使用f2py。然后这些模块将普遍可用。

但是,用户还需要访问Fortran中的模块。为此,用户将需要.mod个文件。

  • 我不愿意分发.mod文件并安装在库中,因为它是非正统的。
  • 我也不想让用户在每次需要访问模块时将定义模块的文件复制到他们自己的项目中。

说我使用NumPy的构建系统并使用Python也很有用。具体来说是numpy.distutils

所以这是我的解决方案:

  • 我将在头文件中定义模块,每个模块一个头文件。
  • 在编辑库本身期间,对于每个头文件foo.hfoo.90中的相应src/modules包含一行:
include  'foo.h'

这样,库就可以访问模块了。

  • 对于用户,在使用库时,如果用户想要访问模块foo,则用户将包含该行
include 'foo.h'

一次,在他们想要的任何文件中。这种方式.mod文件将在用户自己的目录中生成,项目将被编译,使用户可以访问模块所在的那些内存部分。

这看起来合情合理吗?有没有其他方式你知道哪个更好,更少hacky(不涉及.mod文件的分发?)

1 个答案:

答案 0 :(得分:3)

您绝对不想分发.mod文件,因为它们随编译器甚至编译器版本而变化。由于您愿意分发源代码,我认为最简单的解决方案是将您的代码放入某个特定目录,并向用户提供在其代码中包含use XYZ的说明以及如何使用它们编译该模块的说明代码,可能提供示例Make或命令文件。如果要最小化它们编译的代码,可以编写一个特殊的模块,其中包含描述过程的接口。这种方法会产生维护负担,使接口维持与过程一致。当然,如果您要更改过程的参数,它会影响您的用户代码,所以也许您永远不会这样做。