在SWIG中,"%include"指令和标准的C "#include"之间有什么区别?
例如,在所有的教程中,它们通常看起来像这样:
%module my_module
%{
#include "MyHeader.h"
%}
%include "MyHeader.h"
对我来说,这似乎是多余的。也许有知识的人可以澄清一下。
有没有首选的方法来包含C++代码?
%{ ... %}
中的内容将直接传递到输出中;它本身不会被 SWIG 解释。因此,#include
是为了确保生成的 C/C++ 代码包含该头文件。%include
是 SWIG 指令。它告诉 SWIG 在继续处理之前处理该头文件。这样,SWIG 将了解(并生成包装器)在该头文件中声明的类型和函数。%include
。但是,您仍然可能需要#include
以便生成的 C++ 可以编译。%include
它,并让 SWIG 自动生成包装器。如果您的头文件非常复杂(例如iostream),则应手动告诉 SWIG 要包装什么。但并没有硬性规定。%include会仅包含一次文件,这意味着您不需要使用 include-guards。默认情况下,除非您使用 -includeall 选项运行 SWIG,否则 #include 将被忽略。
此外,任何在 %{ 和 %} 之间的内容都将被预处理器忽略,并且在不做任何修改的情况下复制到输出中。