2014-09-04 23 views
2

基本上,我有一个很大的现有代码库,我想用SWIG将所有.h文件包装在一个特定的目录中。这些.h文件中的许多类继承自目录树中其他位置定义的其他类,并且手动追踪其中的每一个都是很痛苦的。有没有办法让SWIG自动包含这些或至少自动创建.i文件?我不想在我自己的代码之外包装任何类(如标准库),但是如果我使用-importall选项,这些将最终包含在内。如何使用SWIG包装许多.h文件并包含任何依赖项?

+1

好问题。我希望对你提出的问题有很好的解决办法。 – 2014-09-04 18:40:57

回答

0

没有自动生成的.i文件,或填充一个文件夹,所有的一切.H的.i“的其他.H,使其正常工作”

的一部分内建的方法原因是“正常工作”是完全随意的:如果A在你想要导出的那组标题中,并且A从B派生出来,你需要导出B“以使它正常工作”?一点也不。但你可能想要。即使A返回B的一个实例,你是否需要导出B?没有(所以不需要在.i中导入Bh),SWIG返回的对象将是B实例的一个不透明的句柄,虽然你不能调用它的任何方法,但你可以给它作为接受B作为参数的函数的参数。

最实用的是编写一个批处理或python脚本来找到你需要的.h(一个班轮,如果全部在同一个文件夹中),拷贝/粘贴到你的.i中,然后手动清理。我只包含你想要导出到目标语言的文件,并添加任何缺少的文件以获得你想要的特定功能(例如实例化基类等)。你可以说“不,我不想定制”你想要的,你没有选择。

+0

就像我说过的,我想把所有的东西都导出到一个给定的头文件中,并且只有其他东西需要它们才能正常工作。我无法进行手动清理步骤;静态的.i文件将导入所有必需的文件,或者.i文件将完全自动生成。 – Matt 2014-09-05 17:45:20

+0

“让他们正常工作”是任意的:我认为你误解了SWIG的工作原理。我已更新帖子,我希望它更清楚。 – Schollii 2014-09-06 03:42:21

+0

如果A派生自B并且只导出A,那么SWIG是否会包装从B继承的成员函数?我对此表示怀疑。 – Matt 2014-09-09 15:12:10

相关问题