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

标签 python c++ include swig

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

最佳答案

没有内置的方法来自动生成 .i 文件,或者用文件夹中的所有 .h 和所有“其他 .h 使其正常工作”填充 .i

部分原因是“正常工作”是完全随意的:如果 A 在您要导出的那组 header 中,并且 A 派生自 B,您是否需要导出 B“才能正常工作”?一点也不。但你可能想要。而且就算A返回了B的实例,还需要export B吗?否(因此不需要在 .i 中导入 B.h),SWIG 返回的对象将是 B 实例的不透明句柄,尽管您无法对其调用任何方法,但您可以提供它作为接受 B 作为参数的函数的参数。

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

关于python - 如何使用 SWIG 包装许多 .h 文件并包含任何依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25671624/

相关文章:

datetime - 组合 datetime.date 和 datetime.time 对象的 Pythonic 方式

C++ 根据条件初始化变量

c++ - 在 C++ 中包装 stdint 变量的基础和继承对象

PHP 包含和子文件夹

javascript - Bokeh如何使用ajax更新数据源处理日期时间

python - 在 Python 2 中取消 Python 3 中的类

python - 如何在 Python 的日志记录模块中撤消 logging.disable() 命令?

C++ << >> 运算符

c++ - 有没有办法从非 C/C++ 文件中读取 C++ 原始字符串文字的内容?

c++ - #include 并不真正包含 C++ 中的代码