排除 ifdef 代码块的接口生成

Excluding interface generation for ifdef code block

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

library.h

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

然后我在界面中包含 header,如下所示

library.i

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

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

排除

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

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

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

应该可以解决问题。

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