2012-04-10 60 views
1

在使用Fortran开发静态库的情况下:具有许多模块的静态库

该库由多个模块组成,例如, “模块a”,“模块b”等。

每个模块都有公共变量,类型和过程。

现在,想在程序“测试”中使用lib。

一种可能的方法是使用每个模块,并在链接期间提供* .a lib文件。例如:

program test 
    use a 
    use b 
    ... 
end program 

但是,如果只需要使用/包含一个模块/ * .h会更好。例如: -

program test 
    use all 
    ... 
end program 

一个可行的办法是将所有的公共变​​量,类型和程序界面复制到“模块的所有”,并使用“模块的所有”,而不是单独的模块。

但是,如果修改了单个模块中的任何一个,则“模块全部”也需要修改以符合更改。

是否有更合适的解决方法,或者是否有自动生成“模块全部”的工具?

非常感谢您的任何输入。

回答

3

我不会将单个模块中的代码复制到模块“全部”中,因为如您所说,当代码发生更改时会导致额外的工作。错误的可能性。相反,在模块“全部”中使用这些模块。然后,当你想让他们都“使用模块全部”。当你想要一个特定的模块时使用那个模块。因为它被禁止,所以必须注意的是循环模块引用:A使用B使用C使用A不允许。

+0

是的,那将是最好的。我花了很长时间才意识到,如果我不使用'private',我现在使用尽可能多的,那么导入的模块符号会再次导出。 – 2012-04-10 08:57:37

+0

谢谢你的回答。因此,需要在包含文件夹中提供所有单独的模块。所有使用的单独模块都需要使用驱动程序进行编译,这使得* .a几乎无用。是对的吗? – mianzhi 2012-04-10 12:51:28