SWIG:%import 和 %include 之间的区别

Posted

技术标签:

【中文标题】SWIG:%import 和 %include 之间的区别【英文标题】:SWIG: difference between %import and %include 【发布时间】:2013-05-12 06:41:10 【问题描述】:

SWIG docs 解释这两个指令如下:

%include:“要将另一个文件包含到 SWIG 界面中,请使用 %include 指令......与 #include 不同,%include 包含每个文件一次(并且不会重新加载文件)后续%include 声明)。因此,没有必要在 SWIG 接口中使用包含防护。”

%import:“SWIG 提供了另一个带有 %import 指令的文件包含指令 ...%import 的目的是从另一个 SWIG 接口文件或头文件中收集某些信息,而不实际生成任何包装器代码。此类信息通常包括类型声明(例如 typedef)以及可能用作接口中类声明的基类的 C++ 类。"

我的问题是这两个指令之间有什么区别以及使用它们的优缺点是什么?


附:只是为了一些背景信息。我有一个简单的 C++ - python 扩展,当我使用上述任一指令时,它可以构建和工作。但是,当我调用 swig -c++ -python my_file.i 时,一个 (%import) 发出的警告较少。

【问题讨论】:

【参考方案1】:

SWIG 的工作方式是它假定您提供的任何有效 C++ 声明都将公开给目标语言。因此,SWIG 提供的任何 C++ 代码都将用于生成接口。

%import 是一种包含机制,阻止为其包含的代码生成接口。这就是区别。所以你在包含标题时提出的问题是,“我是否希望这个标题中的所有内容都暴露给目标语言?”如果答案是“否”,那么您使用%import

【讨论】:

以上是关于SWIG:%import 和 %include 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章

使用 SWIG 的几个 numpy 数组

辨析 ansible 之 import 和 include

IOS开发之----#import#include和@class的区别

swig c++ to python (with numpy): error: use of undeclared identifier 'import_array'

SWIG 和 windows 导出宏

SWIG 不支持 include_next GNU 指令