如何使用SWIG包装许多.h文件并包含任何依赖项

How can I wrap many .h files with SWIG and include any dependencies?

本文关键字:何依赖 依赖 包含任 SWIG 何使用 包装 许多 文件      更新时间:2023-10-16

基本上,我有一个庞大的现有代码库,我想使用SWIG将所有.h文件封装在一个特定的目录中。这些.h文件中的许多类继承自目录树中其他地方定义的其他类,手动查找其中的每个类将是一件痛苦的事情。有没有什么方法可以让SWIG自动包含这些,或者至少自动创建.i文件?我不想在我自己的代码(如标准库)之外包装任何类,但如果我使用-importall选项,这些类最终会被包括在内。

没有内置的方法可以自动生成.i文件,也没有内置的方式可以在文件夹中用all.h和所有"other.h来填充.i以使其正常工作"

部分原因是"正常工作"是完全任意的:如果A在你想要导出的那组头中,而A是从B派生的,你需要导出B"才能正常工作"吗?一点也不。但你可能想要。即使A返回了B的实例,你也需要导出B吗?不需要(所以不需要在.i中导入B.h),SWIG返回的对象将是B实例的不透明句柄,尽管您不能对其调用任何方法,但您可以将其作为参数提供给接受B作为参数的函数。

最实用的方法是编写一个批处理或python脚本来找到您想要的.h的基本集(如果所有文件都在同一个文件夹中,则为一行),将其复制/粘贴到您的.i中,然后手动清理。.i只包含您真正想要导出到目标语言的文件,并添加任何缺失的文件以获得您想要的某些功能(如实例化基类等)。你可以随心所欲地说"不,我不想定制",你别无选择。