如何用SWIG封装多个.h文件并包含依赖项?

3 投票
1 回答
859 浏览
提问于 2025-04-19 21:09

简单来说,我有一大堆现成的代码,想用SWIG把某个文件夹里的所有.h文件都处理一下。这些.h文件里的很多类都是从其他地方定义的类继承来的,要手动一个个找出来可真麻烦。有没有办法让SWIG自动把这些类包含进来,或者至少能自动生成.i文件?我不想把我自己代码以外的类(比如标准库里的类)也处理进去,但如果我用-importall这个选项,它们就会被包含进来。

1 个回答

0

没有内置的方法可以自动生成 .i 文件,也没有办法把一个文件夹里的所有 .h 文件都放到 .i 文件里,或者把所有“其他的 .h 文件”放进去,以确保它能正常工作。

部分原因是“正常工作”这个概念完全是主观的:假设 A 是你想导出的头文件之一,而 A 是从 B 继承来的,那你需要把 B 也导出吗?其实不需要。但你可能会想要这么做。即使 A 返回的是 B 的一个实例,你也不需要导出 B(所以在 .i 文件里不需要引入 B.h),SWIG 返回的对象只是一个指向 B 实例的句柄,虽然你不能直接调用它的方法,但你可以把它当作参数传给接受 B 的函数。

最实际的做法是写一个批处理脚本或者 Python 脚本,找出你想要的 .h 文件的基础集合(如果都在同一个文件夹里,可以一行代码搞定),然后复制粘贴到你的 .i 文件里,手动清理一下,让 .i 文件里只包含你真正想导出的文件,并添加任何缺失的文件,以获得你想要的某些功能(比如实例化基类等)。你可以说“我不想自定义”,但这并不是你的选择。

撰写回答