2016-06-13 62 views
5

我有一個用C++編寫的項目,我正在使用swig生成一些C#包裝。 C++代碼使用Doxygen樣式註釋來註釋類和函數。是否有可能讓Swig接受這些doxygen註釋併爲C#包裝類和函數生成doxygen註釋?爲Swig生成的包含C++的C#生成doxygen註釋

+1

存在一個doxy2swig.py腳本,它會生成一個可包含在接口.i文件中的文件。這是相當整潔 –

+0

我無法讓doxy2swig.py與C#一起工作。它看起來像是設計用於Python,粗略的谷歌搜索沒有產生任何結果。有任何想法嗎? – Alex

+0

它應該工作得很好。它生成一個'DesiredName.i'文件,可以使用'%include「DesiredName.i」'來包含它。你有輸出嗎? –

回答

4

目前,SWIG不會解析代碼註釋,包括Doxygen文檔。

自從幾年以來,SWIG就有了一個SWIG分支,可以讓SWIG處理Doxygen的評論,但即使是目前(AFAIK)也只能將它們映射到Java和Python文檔。

因此,當前的最佳選擇是從C++源代碼中提取Doxygen文檔並將其插入到SWIG生成的包裝中。要了解如何可以做到這一點,這裏是一個什麼doxy2swig.py做了簡要說明(這確實意味着Python的文檔字符串):

  1. 讓Doxygen的提取文件到其XML格式
  2. 解析XML,並重新格式化爲合適的Python文檔字符串
  3. 編寫%feature("docstring") SWIG指令告訴SWIG將文檔字符串附加到包裝的類和方法。

基本上,C#也可以做類似的事情。對於C#,我不知道該怎麼做(2),即如何將Doxygen XML輸出轉換爲合適的C#文檔,您可能需要實現自己(可能需要修改doxy2swig.py腳本)。

對於(3)有一個巧妙的技巧是有記錄的here,注意對於C#也可以使用%csclassmodifiers%csmethodmodifiers完成相同的技巧。這些SWIG功能指令是AFAIK,用於將publicprotected添加到C#方法或類中。但他們可以被劫持以提前提取文檔(+關鍵字public,不要忘記)。因此,它們有效地允許與Python的%feature("docstring")指令相同的功能。

最後,我不知道C#,但是在C#包裝中包含Doxygen註釋有什麼意義?如果你只想使用Doxygen來生成文檔,你可以直接從C++源代碼完成,所以你不會獲得任何東西。在Python中,文檔字符串可以在運行時顯示爲幫助,並由一些IDE使用。 C#也有嗎?

+0

這幾乎是我一直在走下去的道路,所以我猜我很高興有我的懷疑證實。至於你的問題:「最後,我不知道C#,但是在C#包裝中包含Doxygen註釋的意義何在?」我想我的問題應該更清楚。我對C#的評論沒有那麼感興趣,因爲我在他們用來生成的文檔頁面中。直接使用C++文檔字符串並不能正常工作,因爲很多次註釋都會引用其他函數,並且這些引用(以及超鏈接)需要指向相應的C#函數。 – Alex