在Code::Blocks試用與安裝vim插件

博主一直都是在Linux下作開發,平時用的編輯器都是VIM。可vim這的痛點是插對C++的補全作不夠好。我想要的是當我輸入string::時就能提示string下的方法。html

無心間博主看到了Code::Blocks,因而安裝上來玩玩。結果一玩就根本停不下來。git

以下爲Code::Blocks的主界面:
github

它各類鮮明的高亮一會兒就征服了博主。主要是對C++的支持至關好。最令博主喜好的是它的自動調整代碼格式的功能,一點就能將整個工程的代碼按照指定的格式進行調整。shell

可是,博主仍是有點不習慣。沒有vim風格的編輯方式。必竟博主早已習慣了vim的各類快捷方式,能在不摸鼠標的前提下完成全部的開發工做。因而,博主想安裝一個vim的插件。vim


博主在網上查了一下,Code::Blocks仍是有支持vim的插件:http://www.oschina.net/question/1167622_155589 編輯器

對應的源碼在 github裏:https://github.com/zmj64351508/cbvike svg

博主將 cbvike 用 git clone 到本地。打開看,裏面有vike-unix.cbp文件,原來是Code::Blocks的工程。ui

按做者的說明,在編該工程時,必需要指定 wxWidget, codeblocks 的源碼路徑,至少是頭文件的路徑。spa

那就是說要找到 wxWidgets 與 Code::Blocks 的源碼囉。.net

之於Code::Blocks的頭文件,只須要安裝 Code::Blocks 的開發包就行。

sudo dnf install codeblocks-devel -y

安裝好了以後,在 /usr/include/ 路徑下便會有 codeblocks 子目錄。

那麼 wxWidgets 呢?我用 dnf 沒有找到相對應的安裝源。因而到wxWidget的官網去下載。官網裏有不少版本,這個不是隨便下載的,必需要找到一個與Code::Blocks版本相匹配的才行。怎麼看呢?打開 Code::Blocks 的 help --> About .. ,能夠在彈出的對話框中看到:

得知wxWidgets的版本是 2.8.12,因而下載該版本的源碼:https://github.com/wxWidgets/wxWidgets/releases/download/v2.8.12/wxWidgets-2.8.12.zip

解壓出來,進入該源碼目錄,執行 ./configure,報錯:

結果報依賴 gtk 2.0,這個安裝便可:

sudo dnf install gtk2-devel -y



如今 Code::Blocks 與 wxWidgets 的源碼都準備好了。

咱們在執行 cbvike 工程 build 時報編譯錯誤:

爲何有3個 "(invalid)" ?這是怎麼來的?打開 cbvike 的工程文件 vike-unix.cbp 文件看個究竟:

這裏有3個參數沒有指定,沒設定即是"(invalid)",因此編譯報錯了。那在哪裏去指定呢?

Settings --> Global variables...

在 vike-unix.cbp 中都是大寫的,而在這裏則對應小字的名稱,如:CB_DLL_PATH --> cb_dll_path。

將 wx 指定爲 wxWidgets 源碼路徑;cb_path 爲 /usr/include/codeblocks;cb_release_type 填空格。

編譯~

報錯:sdk.h 找不到

感受這個 /usr/include/codeblocks/src/sdk/wxcintilla/include 路徑不對。沒有這個路徑,只有:/usr/include/codeblocks/wxcintilla/include。因而修改 vike-unix.cbp 文件:

但仍是沒有解決上述錯誤。咱們去 wxWidgets 與 codeblocks 中去找,看 sdk.h 文件在哪裏。

結果在 codeblocks 源碼目錄中找到。那這裏,能夠還要改改:

再編譯~

此次是報 wx/wxprec.h 頭文件找不到,這個文件在 wxWidgets 源碼中找到:./include/wx/wxprec.h

那得在 vike-unix.cbp 文件中加一個 wxWidgets 的路徑:

再編譯~

查源碼:

這是定義了 wxUSE_XML 又沒有定義 wxUSE_WCHAR_T 致使的錯誤。

在wxWidgets源碼中找 "wxUSE_WCHAR_T" 結果在 configure 中找到:

 

那這個是由 wxUSE_WCHAR_T 由 ac_cv_sizeof_wchar_t 決定,由這個值有輸出到 config.log 文件中,以下L22221:

在 config.log 中查得 ac_cv_sizeof_wchar_t 爲 4 :

並且在 confdefs.h 中已經定義了 "SIZEOF_WCHAR_T"(見L22222~22225)。

查 confdefs.h ,結果沒有找到這個文件。

......... 

最終查找,configure生成的配置文件是 ./lib/wx/include/gtk2-ansi-release-2.8/wx/setup.h

博主在 wxWidgets 中也 make 了一下,過不了,也是跟上面同樣的問題。看來,若是解決了 wxWidgets 的編譯問題以後,cbvike 的編譯問題也應該迎刃而解了。

........

不折騰這個wxWidgets的編譯問題了。咱們已在軟件源中找到 wxGTK 的源了:

安裝之:

sudo dnf install wxGTK-devel-2.8.12-16.fc22.x86_64 -y

完成!

從新修改 wx 的值:爲 /usr/include/wx-2.8/

從新編譯:

這個可能要從新調整一下 vike-unix.cbp

再編譯:

報找不到 wx/setup.h,博主就將以前倒騰的 wxWidgets 下的 setup.h 複製過來。

再編譯,報:

說我應該經過執行 wx-config 來獲取編譯選項。

我查看 vike-unix.cbp,裏面:

有這個,但咱們能夠在編譯日誌中沒有看到 wx-config 有任何輸出。博主手動執行了一下 wx-config,還真有內容:

[hevake_lcj@Hevake ~]$ wx-config --cflags
-I/usr/lib64/wx/include/gtk2-unicode-release-2.8 -I/usr/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread

那就來硬的,咱們直接將下面這串複製到 vike-unix.cbp,覆蓋 `wx-config --cflags`:

再編譯:

找不到 tinyxml.h 文件,這個好辦,安裝一個 tinyxml-devel 就能夠了。

sudo dnf install tinyxml-devel -y

再編譯:

這下是連接出錯了。說明編譯是過了的。

查看連接日誌:

可看連接庫路徑沒有設置。進 settings --> Gobal variable ... 中,將 cb_dll_path 設置成 /usr/lib64。

再編譯:

再是報上面的錯誤。不過,從上面的連接命令能夠看到,只有 lcodeblocks,沒有連接 wx 的庫。而wxEvtHandler應該是wx庫的內容。

在 /usr/lib64,查 find -name 'libwx_*.so' ,獲得這個多:

./libwx_gtk2u_core-2.8.so
./libwx_gtk2u_richtext-2.8.so
./libwx_baseu-2.8.so
./libwx_gtk2u_adv-2.8.so
./libwx_baseu_net-2.8.so
./libwx_gtk2u_gl-2.8.so
./libwx_gtk2u_ogl-2.8.so
./libwx_gtk2u_gizmos-2.8.so
./libwx_gtk2u_qa-2.8.so
./libwx_gtk2u_media-2.8.so
./libwx_baseu_xml-2.8.so
./libwx_gtk2u_gizmos_xrc-2.8.so
./libwx_gtk2u_aui-2.8.so
./libwx_gtk2u_stc-2.8.so
./libwx_gtk2u_xrc-2.8.so
./libwx_gtk2u_svg-2.8.so
./libwx_gtk2u_html-2.8.so

到底應該連接哪個呢?

看看 vike-unix.cbp 中關於連接的參數:

執行一下:wx-config --libs,結果:

[hevake_lcj@Hevake ~]$ wx-config --libs
-pthread -Wl,-z,relro   -lwx_gtk2u_richtext-2.8 -lwx_gtk2u_aui-2.8 -lwx_gtk2u_xrc-2.8 -lwx_gtk2u_qa-2.8 -lwx_gtk2u_html-2.8 -lwx_gtk2u_adv-2.8 -lwx_gtk2u_core-2.8 -lwx_baseu_xml-2.8 -lwx_baseu_net-2.8 -lwx_baseu-2.8

又是編譯過程當中 wx-config 執行無效引發的。按上面同樣的解決辦法,直接將 wx-config --libs 的結果直接替換 vike-unix.cbp 中的 wx-config --libs:

再連接:

經過了!


那如今,再從新編譯一下 Release 目標:

查看cbvike目錄的build目錄下,生成了這幾個文件:

如今的問題是,如何安裝這個插件?

在 Code::Blocks 中,Plugins-->Manage plugins...:

而後找到cbVike.cbplugin,結果安裝時報錯:

搞錯沒?咱們這裏有libcbVike.so,它卻去找cbVike.so?

研究了半天,發現將 cbVike.cbplugin 重命名爲 libcbVike.cbplugin 就能安裝成功:



那如今最後一個問題:怎麼開啓與關閉 vim 插件功能?

查爲,從新啓動一下Code::Blocks,cbVike功能便開啓了。



後記

以前有遇到 vike-unix.cbp 中 "wx-config --cflags" 與 "wx-config --libs" 未生效問題。

這個問題是因爲先開了Code::Blocks後才安裝的 wxGTK-devel,因此 wx-config 在每次編譯的時候沒有生效。

關閉Code::Blocks後再打開就能夠了,不須要像上面那樣直接修改 vike-unix.cbp 文件。

相關文章
相關標籤/搜索