部落客一直都是在linux下做開發,平時用的編輯器都是vim。可vim這的痛點是插對c++的補全做不夠好。我想要的是當我輸入string::時就能提示string下的方法。
無意間部落客看到了code::blocks,于是安裝上來玩玩。結果一玩就根本停不下來。
如下為code::blocks的主界面:
它各種鮮明的高亮一下子就征服了部落客。主要是對c++的支援相當好。最令部落客喜愛的是它的自動調整代碼格式的功能,一點就能将整個工程的代碼按照指定的格式進行調整。
但是,部落客還是有點不習慣。沒有vim風格的編輯方式。必竟部落客早已習慣了vim的各種快捷方式,能在不摸滑鼠的前提下完成所有的開發工作。于是,部落客想安裝一個vim的插件。
部落客将 cbvike 用 git clone 到本地。打開看,裡面有vike-unix.cbp檔案,原來是code::blocks的工程。
按作者的說明,在編該工程時,必須要指定 wxwidget, codeblocks 的源碼路徑,至少是頭檔案的路徑。
那就是說要找到 wxwidgets 與 code::blocks 的源碼啰。
之于code::blocks的頭檔案,隻需要安裝 code::blocks 的開發包就行。
<a href="http://my.oschina.net/hevakelcj/blog/661384#">?</a>
1
<code>sudo</code> <code>dnf </code><code>install</code> <code>codeblocks-devel -y</code>
安裝好了之後,在 /usr/include/ 路徑下便會有 codeblocks 子目錄。
解壓出來,進入該源碼目錄,執行 ./configure,報錯:
結果報依賴 gtk 2.0,這個安裝即可:
現在 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 的源了:
安裝之:
完成!
重新修改 wx 的值:為 /usr/include/wx-2.8/
重新編譯:
這個可能要重新調整一下 vike-unix.cbp
再編譯:
報找不到 wx/setup.h,部落客就将之前倒騰的 wxwidgets 下的 setup.h 複制過來。
再編譯,報:
說我應該通過執行 wx-config 來擷取編譯選項。
我檢視 vike-unix.cbp,裡面:
有這個,但我們可以在編譯日志中沒有看到 wx-config 有任何輸出。部落客手動執行了一下 wx-config,還真有内容:
那就來硬的,我們直接将下面這串複制到 vike-unix.cbp,覆寫 `wx-config --cflags`:
找不到 tinyxml.h 檔案,這個好辦,安裝一個 tinyxml-devel 就可以了。
這下是連結出錯了。說明編譯是過了的。
檢視連結日志:
可看連結庫路徑沒有設定。進 settings --> gobal variable ... 中,将 cb_dll_path 設定成 /usr/lib64。
再是報上面的錯誤。不過,從上面的連結指令可以看到,隻有 lcodeblocks,沒有連結 wx 的庫。而wxevthandler應該是wx庫的内容。
在 /usr/lib64,查 find -name 'libwx_*.so' ,得到這個多:
到底應該連結哪一個呢?
看看 vike-unix.cbp 中關于連結的參數:
執行一下:wx-config --libs,結果:
又是編譯過程中 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 檔案。