因为想研究一下CB的插件,就需要用到CB的开发库,就只能自行编译它了。
前一段时间从官网下的是12.11,src目录下面有cbp工程文件,真是一阵窃喜哈,能用CB打开了,嗯嗯,不错。没想到结果杯具发生,搞了一天都没有利索,先折腾了wxWidgets2.8.12(参见前文:CodeBlocks配置方法积累),好不容易搞掂,CB却编译死活没戏了,源码级的错误,目前咱还搞不定……
所幸,CB官方据说发挥了一年一升级的光荣传统,13.12-RC1 、13.12-RC2粉墨登场,下来源码一看,对于我这种小白第一眼看过去,真心不赖啊,支持wxWidgets2.9+3.0 && 32+64位编译,而且还带了原版的pot(i18n),而且插件源码目录下,同样也是支持wxWidgets2.9+3.0两种工程包(貌似插件里只有wx3.0版区分32/64位了)。
OK,开始动手编译CB,首先要有一个minGW32编译器(我用的是TDM4.7.1),还有wxWidgets3.0开发库(参见前文:CodeBlocks配置方法积累)。
然后,最重要的是:我们还需要一个已编译好的CodeBlocks(这个干吗呢?套用前人在编译CB时说到的“鸡生蛋蛋生鸡”——反正你得用CB编译CB,哈哈)
现在,进入DOS窗口,输入
D:\codeblocks-13.12\src>set CB_ROOT=D:\devtools\CodeBlocks
D:\codeblocks-13.12\src>set GCC_ROOT=D:\devtools\MinGW
为了清爽编译,path环境变量也简洁设置了一下(windows的路径不能省,否则xcopy命令不能执行,我可是先吃了一次暗亏第二次才搞掂的!)
D:\codeblocks-13.12\src>set path=%GCC_ROOT%\bin;%SystemRoot%\system32;%SystemRoot%;
设定完毕,敲入"batch_build_core_30"(无引号,因为是为了研究插件用,就只编译了CB的核心部件),经过漫长的等待(10分钟吧),大功告成了,源程序目录下多了一个devel30文件夹
用NotePad++打开Autoversioning.cbp,可以看到编译所需环境已具备了
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<CodeBlocks_project_file>
<FileVersion major="1" minor="6" />
<Project>
<Option title="AutoVersioning wx3.0.x" />
<Option pch_mode="2" />
<Option compiler="gcc" />
<Build>
<Target title="default">
<Option output="..\..\..\devel30\share\codeblocks\plugins\AutoVersioning.dll" prefix_auto="0" extension_auto="0" />
<Option object_output="..\..\..\.objs30\plugins\contrib\AutoVersioning" />
<Option type="3" />
<Option compiler="gcc" />
<Option parameters="--debug-log --multiple-instance -na -ns -nd -p debug" />
<Option host_application="..\..\..\devel30\codeblocks.exe" />
<Compiler>
<Add option="$(#CB_RELEASE_TYPE)" />
<Add option="-pipe" />
<Add option="-mthreads" />
<Add option="-fmessage-length=0" />
<Add option="-fexceptions" />
<Add option="-Winvalid-pch" />
<Add option="-DBUILDING_PLUGIN" />
<Add option="-DHAVE_W32API_H" />
<Add option="-D__WXMSW__" />
<Add option="-DWXUSINGDLL" />
<Add option="-DcbDEBUG" />
<Add option="-DCB_PRECOMP" />
<Add option="-DWX_PRECOMP" />
<Add option="-DwxUSE_UNICODE" />
<Add directory="..\..\..\include" />
<Add directory="..\..\..\sdk\wxscintilla\include" />
<Add directory="$(#WX30.include)" />
<Add directory="$(#WX30.lib)\gcc_dll$(WX_CFG)\msw$(WX_SUFFIX)" />
</Compiler>
<Linker>
<Add option="-Wl,--enable-auto-import" />
<Add option="-mthreads" />
<Add library="wxmsw$(WX_VERSION)$(WX_SUFFIX)" />
<Add library="codeblocks" />
<Add directory="..\..\..\devel30" />
<Add directory="$(#WX30.lib)\gcc_dll$(WX_CFG)" />
</Linker>
<ExtraCommands>
<Add after="zip -j9 ..\..\..\devel30\share\codeblocks\AutoVersioning.zip manifest.xml" />
<Mode after="always" />
</ExtraCommands>
</Target>
<Environment>
<Variable name="WX_SUFFIX" value="u" />
<Variable name="WX_CFG" value="" />
<Variable name="WX_VERSION" value="30" />
</Environment>
</Build>
<VirtualTargets>
<Add alias="All" targets="default;" />
</VirtualTargets>
<Compiler>
<Add option="-Wall" />
<Add option="$(#CB_RELEASE_TYPE)" />
</Compiler>
用CB打开这个工程时,需要注意在CB中注册两个全局环境变量
①wx30,将其base设定为"D:\devtools\resource\wxWidgets-3.0.0"(指向你的wx3.0开发库主目录)
②CB_RELEASE_TYPE,将其base设定为"-O2"(老外说滴,貌似他们都是砖家,反正是能用了!——开源还是老外的天下啊,国人当自强啊)
编译结果如下:
Output file is ..\..\..\devel30\share\codeblocks\plugins\AutoVersioning.dll with size 767.00 KB
Running target post-build steps
zip -j9 ..\..\..\devel30\share\codeblocks\AutoVersioning.zip manifest.xml
adding: manifest.xml (160 bytes security) (deflated 54%)
Process terminated with status 0 (0 minute(s), 16 second(s))
0 error(s), 0 warning(s) (0 minute(s), 16 second(s))