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
)会发出较少的警告。
答案 0 :(得分:10)
SWIG的工作方式是假定您提供的任何有效C ++声明都要暴露给目标语言。因此,提供SWIG的任何C ++代码都将用于生成接口。
%import
是一种包含机制,阻止为其包含的代码生成接口。这就是区别。因此,在包含标题时,您要问的问题是“我是否希望此标题中的所有内容都暴露给目标语言?”如果答案为“否”,则使用%import
。