如何在SWIG界面中使用C ++宏

时间:2014-01-19 16:32:14

标签: python c++ swig

%{
#define FOOBAR foobar
%}


%define MACRO(cl)

%pythoncode %{
    def cl():
            return
%}

%enddef

MACRO(FOOBAR)

我希望生成的SWIG Python代码定义为foobar()。但是C宏没有生效 - 我只有FOOBAR()

如何启用SWIG接口以使用C宏?

1 个答案:

答案 0 :(得分:3)

你得到的非常接近。具体来说,你有:

%{
#define FOOBAR foobar
%}

然而%{ %}只是让SWIG将包含的内容传递给生成的.cxx文件 - 它不解析或考虑那里有什么。实际上,SWIG忽略#define并让编译器稍后处理它。

所以你可以简单地修复它:

#define FOOBAR foobar

%define MACRO(cl)

%pythoncode %{
    def cl():
            return
%}

%enddef

MACRO(FOOBAR)

这是你希望的,因为SWIG预处理器现在可以看到宏。

(注意:如果您在#include内使用%{ %},则会因类似原因再次使用%include%include会导致SWIG本身读取解释文件的内容)