如何通过SWIG使用受限代码

时间:2014-02-14 10:52:52

标签: python swig

我有以下提到的代码..

文件:a.h

#include <stdio.h>

#ifdef ALLOW
int check(int n);
#endif 

SWIG:test.i

%module test
%{
  #include "a.h"
%}

%include "a.h"

CMD:swig -python test.i

这是生成_test.so,当我将此库导入python时,这不会显示 检查功能

在制作中我可以使用-D选项,比如gcc -DALLOW a.c。

如何使用SWIG实现相同功能

2 个答案:

答案 0 :(得分:1)

看起来很简单 - swig -DALLOW -python test.i

答案 1 :(得分:0)

您可以在SWIG界面中定义预处理器宏(即在.i文件中)。

所以在你的情况下你可能想要这样做:

%module test
%{
  #include "a.h"
%}

#define ALLOW
%include "a.h"

这足以使SWIG本身“看到”#ifdef内部,但是如果你想在生成的warpper代码中定义ALLOW,你还要添加:

%module test
%{
  #define ALLOW
  #include "a.h"
%}

#define ALLOW    
%include "a.h"

因为%{ ... %}的内容直接传递给生成的代码,而普通#define只会影响SWIG本身查看文件的方式。