SWIG: %import和%include的区别

SWIG: difference between %import and %include

本文关键字:区别 %include %import SWIG      更新时间:2023-10-16

SWIG文档对这两个指令的解释如下:

  • %include: "要将另一个文件包含到SWIG接口中,请使用%include指令…与#include不同,%include包含每个文件一次(并且不会在随后的%include声明中重新加载文件)。因此,没有必要在SWIG接口中使用include-guard。"

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

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


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

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

%import是一个包含机制,阻止生成它所包含的代码的接口。这就是区别。所以在包含头信息时你要问的问题是,我是否希望这个头信息中的所有内容都暴露给目标语言如果答案是"否",则使用%import