博主一直都是在Linux下做开发,平时用的编辑器都是VIM。可vim这的痛点是插对C++的补全做不够好。我想要的是当我输入string::时就能提示string下的方法。
无意间博主看到了Code::Blocks,于是安装上来玩玩。结果一玩就根本停不下来。
如下为Code::Blocks的主界面:
它各种鲜明的高亮一下子就征服了博主。主要是对C++的支持相当好。最令博主喜爱的是它的自动调整代码格式的功能,一点就能将整个工程的代码按照指定的格式进行调整。
但是,博主还是有点不习惯。没有vim风格的编辑方式。必竟博主早已习惯了vim的各种快捷方式,能在不摸鼠标的前提下完成所有的开发工作。于是,博主想安装一个vim的插件。
博主在网上查了一下,Code::Blocks还是有支持vim的插件:http://www.oschina.net/question/1167622_155589
对应的源码在 github里:https://github.com/zmj64351508/cbvike
博主将 cbvike 用 git clone 到本地。打开看,里面有vike-unix.cbp文件,原来是Code::Blocks的工程。
按作者的说明,在编该工程时,必须要指定 wxWidget, codeblocks 的源码路径,至少是头文件的路径。
那就是说要找到 wxWidgets 与 Code::Blocks 的源码啰。
之于Code::Blocks的头文件,只需要安装 Code::Blocks 的开发包就行。
1
|
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 文件。