2011-03-28 56 views
13

我一直在使用omniCppComplete + ctags一段時間,並且希望對代碼完成做進一步的改進。gccsense與clang_complete

根據這裏[1]的建議,gccsense和clang_complete似乎是替代方案。但是,我不確定哪一個更好。對他們的表現有任何想法?
謝謝!

更新:當我嘗試clang_complete後,我發現完成速度非常不可接受。 然後我使用libclang.dylib嘗試了它,它速度很快但仍然讓人覺得落後。 我想我現在應該堅持ctags。

回答

21

你應該使用clang_complete而不是gccsense。

這裏的要點是兩者的架構。這兩種解決方案背後的想法非常相似:如果不訪問內部編譯器(gcc)信息(抽象語法樹),則無法獲得正常的C++完成,而gcc沒有爲您提供足夠的接口。雖然訪問這個信息的實現部分在這裏完全不同:gccsense是一種「黑客」 - 它是一個gcc的自定義構建,能夠存儲將其提供給插件的必要信息,而clang_complete則通過使用替代方法編譯器:clang,其創建的主要目標之一是通過外部工具輕鬆訪問AST。

因此,如果使用gccsense,您需要使用一種自定義gcc編譯器來編譯代碼,該編譯器現在已經有點過時了(gccsense使用gcc 4.4),並且需要不斷需要開發人員對功能的支持。相反,clang_complete並不太依賴於clang編譯器,它使用它作爲外部工具。

至於性能:再次叮噹被設計爲比gcc快,它是。 Windows上的Clang_complete比MacOS/Linux上的稍微慢一點,但是當時甚至無法爲Windows編譯gccsense。

+0

這非常合理。我要給clang_complete一個嘗試。感謝您的建議! – 2011-04-11 03:43:25

+1

嗯,我不這麼認爲。我剛剛嘗試了gccsense,並且在完成代碼之前無需編譯任何內容即可完成。容易安裝,也容易使用。使用CEDET,它無法在boost :: mutex中找到函數,但gccsense可以看到它。然而,缺點是gccsense無法完成「。」或「>」,所以我會把這個問題留給CEDET,當CEDET無法完成它的工作時,我會使用gccsense(當然還有鍵盤綁定)。 – Amumu 2012-01-03 12:33:25

+0

感謝您的回答! – rdo 2013-05-13 11:17:18