las*_*owh 13 swig c-preprocessor
我们有一个供应商为我们提供了一个C++库和标题,我正在尝试使用SWIG进行包装.看来他们使用预处理器指令过于聪明了一半:
// top.h
#define DECLARE_WITH_COMMA(a) a,
Run Code Online (Sandbox Code Playgroud)
然后
// foo.h
#include "top.h"
#define MY_TYPES(d) \
d(One) \
d(Two) \
d(Three) \
NumElems
enum MyTypes {
MY_TYPES(DECLARE_WITH_COMMA)
};
Run Code Online (Sandbox Code Playgroud)
当我尝试在"foo.h"上运行SWIG(版本2.0.4)时,这是一种长篇大论的说法,我得到:
foo.h:12: Error: Syntax error in input(1).
Run Code Online (Sandbox Code Playgroud)
所以我的问题是我的选择是什么,因为我可能不想更改供应商提供的标题?
Mar*_*nen 12
默认情况下,SWIG不会递归到嵌套标题中,因此您的.i文件应如下所示:
%module mymod
%{
#include "foo.h"
%}
%include "top.h"
%include "foo.h"
Run Code Online (Sandbox Code Playgroud)
还有一个SWIG开关:
-includeall - Follow all #include statements
Run Code Online (Sandbox Code Playgroud)
但是如果您的系统标题可能比您想要的更多.