15

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

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

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

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


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

4

1 回答 1

13

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

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

于 2013-05-12T06:56:27.330 回答