排除ifdef代码块的接口生成

时间:2016-10-08 14:09:12

标签: c++ swig

我正在尝试为C ++库生成Go接口。其中一个库头像这样的代码块

library.h

...
#ifndef DISABLE_FEATURE_X
  struct TypeX
  {
    TypeX();
    {
      ...
    }
  };
#endif
...

然后我在接口中包含标题,如下所示

library.i

%{
  #include <library.h>
%}
...
%include <library.h>

当我生成定义了宏DISABLE_FEATURE_X的Go接口时,Swig会为TypeX生成接口代码,即使它被宏DISABLE_FEATURE_X排除。

如何在生成界面时告诉Swig排除代码块?

1 个答案:

答案 0 :(得分:1)

最简单的方法是在SWIG接口内定义宏,以便SWIG预处理器看不到函数:

%{
  #include <library.h>
%}
...
#define DISABLE_FEATURE_X
%include <library.h>

应该这样做。

SWIG本身也支持-D命令行参数,所以如果您更愿意也可以像编译器一样调用swig -DDISABLE_FEATURE_X ...