由于预处理程序指令,SWIG错误

时间:2012-05-25 19:26:17

标签: swig c-preprocessor

我们有一家供应商为我们提供了一个C ++库和标题,我正在尝试使用SWIG进行包装。看起来他们使用预处理器指令过于聪明了一半:

// top.h
#define DECLARE_WITH_COMMA(a) a,

然后

// foo.h
#include "top.h"

#define MY_TYPES(d) \
  d(One)   \
  d(Two)   \
  d(Three) \
  NumElems

enum MyTypes {
  MY_TYPES(DECLARE_WITH_COMMA)
};

当我尝试在“foo.h”上运行SWIG(版本2.0.4)时,这是一种长篇大论的说法,我得到:

foo.h:12: Error: Syntax error in input(1).

所以我的问题是我的选择是什么,因为我可能不想更改供应商提供的标题?

1 个答案:

答案 0 :(得分:12)

默认情况下,SWIG不会递归到嵌套标题中,因此您的.i文件应如下所示:

%module mymod

%{
#include "foo.h"
%}

%include "top.h"
%include "foo.h"

还有一个SWIG开关:

-includeall     - Follow all #include statements

但是如果您的系统标题可能比您想要的更多。