%{
#define FOOBAR foobar
%}
%define MACRO(cl)
%pythoncode %{
def cl():
return
%}
%enddef
MACRO(FOOBAR)
我希望生成的SWIG Python代码定义为foobar()
。但是C宏没有生效 - 我只有FOOBAR()
。
如何启用SWIG接口以使用C宏?
答案 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本身读取解释文件的内容)