我正在创建一个Fortran 90共享库及其Python绑定。我需要对其进行调整,以便用户在使用Fortran和Python时可以访问共享库的模块。
Python部分很简单,我将创建签名文件并使用f2py
。然后这些模块将普遍可用。
但是,用户还需要访问Fortran中的模块。为此,用户将需要.mod
个文件。
.mod
文件并安装在库中,因为它是非正统的。 说我使用NumPy
的构建系统并使用Python也很有用。具体来说是numpy.distutils
。
所以这是我的解决方案:
foo.h
,foo.90
中的相应src/modules
包含一行:include 'foo.h'
这样,库就可以访问模块了。
foo
,则用户将包含该行include 'foo.h'
一次,在他们想要的任何文件中。这种方式.mod
文件将在用户自己的目录中生成,项目将被编译,使用户可以访问模块所在的那些内存部分。
这看起来合情合理吗?有没有其他方式你知道哪个更好,更少hacky(不涉及.mod
文件的分发?)
答案 0 :(得分:3)
您绝对不想分发.mod文件,因为它们随编译器甚至编译器版本而变化。由于您愿意分发源代码,我认为最简单的解决方案是将您的代码放入某个特定目录,并向用户提供在其代码中包含use XYZ
的说明以及如何使用它们编译该模块的说明代码,可能提供示例Make或命令文件。如果要最小化它们编译的代码,可以编写一个特殊的模块,其中包含描述过程的接口。这种方法会产生维护负担,使接口维持与过程一致。当然,如果您要更改过程的参数,它会影响您的用户代码,所以也许您永远不会这样做。