2014-09-04 143 views
2

基本上,我有一個很大的現有代碼庫,我想用SWIG將所有.h文件包裝在一個特定的目錄中。這些.h文件中的許多類繼承自目錄樹中其他位置定義的其他類,並且手動追蹤其中的每一個都是很痛苦的。有沒有辦法讓SWIG自動包含這些或至少自動創建.i文件?我不想在我自己的代碼之外包裝任何類(如標準庫),但是如果我使用-importall選項,這些將最終包含在內。如何使用SWIG包裝許多.h文件幷包含任何依賴項?

+1

好問題。我希望對你提出的問題有很好的解決辦法。 – 2014-09-04 18:40:57

回答

0

沒有自動生成的.i文件,或填充一個文件夾,所有的一切.H的.i「的其他.H,使其正常工作」

的一部分內建的方法原因是「正常工作」是完全隨意的:如果A在你想要導出的那組標題中,並且A從B派生出來,你需要導出B「以使它正常工作」?一點也不。但你可能想要。即使A返回B的一個實例,你是否需要導出B?沒有(所以不需要在.i中導入Bh),SWIG返回的對象將是B實例的一個不透明的句柄,雖然你不能調用它的任何方法,但你可以給它作爲接受B作爲參數的函數的參數。

最實用的是編寫一個批處理或python腳本來找到你需要的.h(一個班輪,如果全部在同一個文件夾中),拷貝/粘貼到你的.i中,然後手動清理。我只包含你想要導出到目標語言的文件,並添加任何缺少的文件以獲得你想要的特定功能(例如實例化基類等)。你可以說「不,我不想定製」你想要的,你沒有選擇。

+0

就像我說過的,我想把所有的東西都導出到一個給定的頭文件中,並且只有其他東西需要它們才能正常工作。我無法進行手動清理步驟;靜態的.i文件將導入所有必需的文件,或者.i文件將完全自動生成。 – Matt 2014-09-05 17:45:20

+0

「讓他們正常工作」是任意的:我認爲你誤解了SWIG的工作原理。我已更新帖子,我希望它更清楚。 – Schollii 2014-09-06 03:42:21

+0

如果A派生自B並且只導出A,那麼SWIG是否會包裝從B繼承的成員函數?我對此表示懷疑。 – Matt 2014-09-09 15:12:10

相關問題