SWIG:%import和%include之间的差异

时间:2013-05-12 06:41:11

标签: c++ swig

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

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

  • %import:“SWIG提供了另一个带有%import指令的文件包含指令...... %import的目的是从另一个SWIG接口文件中收集某些信息或这个信息通常包括类型声明(例如,typedef)以及可能用作接口中类声明的基类的C ++类。“

我的问题是这两个指令之间的区别是什么?使用每个指令的优缺点是什么?


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

1 个答案:

答案 0 :(得分:10)

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

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