2013-05-03 65 views
0

我有一種情況,我需要在定義上放置一個守護程序,以便在某些情況下它不會包含在SWIG輸出中多次。不幸的是,在編寫.cc文件之前,SWIG正在擴展#if語句。這裏的情況:停止swig擴展#if表達式

%define FOO(BAR) 
%{ 
#if !defined(_##BAR##_DECLARED) 
    #define _##BAR##_DECLARED 

    // declaration stuff 

#endif 
%} 

// implementation stuff 

%enddef 

SWIG產生FOO(CLS)如下:

#if !0 
    #define _CLS_DECLARED 
/*@SWIG:dummy.swg,46,[email protected]*/ 

    // declaration stuff 

/*@[email protected]*/; 
#endif 

// implementation stuff 

所以#if語句由痛飲寫輸出(創建沒用#if !0)之前展開,而不是#define。有沒有辦法告訴SWIG不要擴大#if

我嘗試添加其餘以各種方式定義了一個輔助的宏GUARD(SYM)

// Using C-style macros, including !defined() 
#define GUARD(SYM) !defined(_##SYM##DECLARED) 

// Using C-style macros, excluding !defined() 
#define GUARD(SYM) _##SYM##DECLARED) 

// Using SWIG-style macros, including !defined() 
%define GUARD(SYM) !defined(_##SYM##DECLARED) 
%enddef 

// Using SWIG-style macros, excluding !defined() 
%define GUARD(SYM) _##SYM##DECLARED 
%enddef 

對於這些我已經相應地修改該#if語句。輸出總是一樣的。

在情況下,它是非常有用的,這裏的swig -version輸出:

SWIG Version 2.0.8 

Compiled with g++ [i386-apple-darwin11.4.2] 

Configured options: +pcre 

Please see http://www.swig.org for reporting bugs and further information 

回答

0

如果你想痛飲直接傳遞報表到生成的文件保持不變,然後把它們放進 %{...%}

是,其用於將#include轉換爲swig生成的輸出。

+0

其實,這是一個錯字。我正在使用'%{'和'%}',請參閱我的編輯。 – 2013-05-03 20:09:25