博主一直都是在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 文件。