wxWidgets在windows下使用bakefile管理编译代码
做一些跨平台或者大点的应用,不光大家个人的技术能力要强,系统的设计要完善,作为编译代码管理也是非常重要的一块,现以wxWidgets在windows下应用的编译环境举例说明。
不论是GCC的make或VC的nmake都是会对某个项目的makefile去进行检查和产生编译。当然如果不怕麻烦,可以在一个命令行里一个文件一个文件去编译。而这里则是要使用bakefile对基于wxWidgets的应用进行编译。
首先在windows中需要包含wxWidgets的bkl文件应为%WX_WIDGETS%"build"bakefiles"wxpresets"presets"wx.bkl,所以用一个bat文件来简化相关操作。如:bake.bat
@echo off
if "%1"=="" goto ERROR
if not "%2"=="" goto ERROR
set WX_WIDGETS=wxWidgets-2.8.7
set WX_DEFINES=-IC:"works"%WX_WIDGETS%"build"bakefiles"wxpresets -DWX_DIR=C:"works"%WX_WIDGETS% -DWX_UNICODE=1
if "%1"=="release" goto RELEASE
:DEBUG
bakefile build.bkl -f msvc -o Makefile -DWX_DEBUG=1 -DWX_SHARED=1 -DBUILD=debug -DBUILDDIR=Debug %WX_DEFINES%
goto END
:RELEASE
bakefile build.bkl -f msvc -o Makefile -DWX_DEBUG=0 -DWX_SHARED=0 -DBUILD=release -DBUILDDIR=Release %WX_DEFINES%
goto END
:ERROR
echo Usage: bake [debug / release]
:END
放在和项目的bkl文件一块的地方。
然后创建build.bkl文件
<?xml version="1.0" ?>
<!-- $Id: bakefile_quickstart.txt,v 1.5 2006/02/11 18:41:11 KO Exp $ -->
<makefile>
<include file="presets/wx.bkl"/>
<set var="DEBUGINFO">
<if cond="BUILD=='debug'">on</if>
<if cond="BUILD=='release'">off</if>
</set>
<set var="DEBUGRUNTIME">
<if cond="BUILD=='debug'">on</if>
<if cond="BUILD=='release'">off</if>
</set>
<set var="OPTIMIZEFLAG">
<if cond="BUILD=='debug'">off</if>
<if cond="BUILD=='release'">speed</if>
</set>
<set var="WARNINGS">
<if cond="BUILD=='debug'">max</if>
<if cond="BUILD=='release'">no</if>
</set>
<set var="RUNTIMELIBRARY">
<if cond="BUILD=='debug'">dynamic</if>
<if cond="BUILD=='release'">static</if>
</set>
<template id="common" template="wx">
<debug-info>$(DEBUGINFO)</debug-info>
<debug-runtime-libs>$(DEBUGRUNTIME)</debug-runtime-libs>
<optimize>$(OPTIMIZEFLAG)</optimize>
<warnings>$(WARNINGS)</warnings>
<if cond="FORMAT=='msvc'">
<if cond="WX_SHARED=='1'">
<cxxflags>/DWXUSINGDLL</cxxflags>
</if>
<if cond="BUILD=='release'">
<threading>multi</threading>
</if>
</if>
<runtime-libs>$(RUNTIMELIBRARY)</runtime-libs>
<wx-lib>net</wx-lib>
<wx-lib>core</wx-lib>
<wx-lib>base</wx-lib>
</template>
<exe id="test" template="common">
<app-type>console</app-type>
<include>server/include</include>
<sources>$(fileList('server/db/test/*.cpp'))</sources>
</exe>
</makefile>
按以上的步骤,将相关设置在更改后,那么所有的项目成员都不需要因为vs中的input lib,dirs等问题困扰了。
试试bake release后,查看一下Makefile.vc的内容对不对,同时nmake就可以看到编译过程了.
不论是GCC的make或VC的nmake都是会对某个项目的makefile去进行检查和产生编译。当然如果不怕麻烦,可以在一个命令行里一个文件一个文件去编译。而这里则是要使用bakefile对基于wxWidgets的应用进行编译。
首先在windows中需要包含wxWidgets的bkl文件应为%WX_WIDGETS%"build"bakefiles"wxpresets"presets"wx.bkl,所以用一个bat文件来简化相关操作。如:bake.bat
@echo off
if "%1"=="" goto ERROR
if not "%2"=="" goto ERROR
set WX_WIDGETS=wxWidgets-2.8.7
set WX_DEFINES=-IC:"works"%WX_WIDGETS%"build"bakefiles"wxpresets -DWX_DIR=C:"works"%WX_WIDGETS% -DWX_UNICODE=1
if "%1"=="release" goto RELEASE
:DEBUG
bakefile build.bkl -f msvc -o Makefile -DWX_DEBUG=1 -DWX_SHARED=1 -DBUILD=debug -DBUILDDIR=Debug %WX_DEFINES%
goto END
:RELEASE
bakefile build.bkl -f msvc -o Makefile -DWX_DEBUG=0 -DWX_SHARED=0 -DBUILD=release -DBUILDDIR=Release %WX_DEFINES%
goto END
:ERROR
echo Usage: bake [debug / release]
:END
放在和项目的bkl文件一块的地方。
然后创建build.bkl文件
<?xml version="1.0" ?>
<!-- $Id: bakefile_quickstart.txt,v 1.5 2006/02/11 18:41:11 KO Exp $ -->
<makefile>
<include file="presets/wx.bkl"/>
<set var="DEBUGINFO">
<if cond="BUILD=='debug'">on</if>
<if cond="BUILD=='release'">off</if>
</set>
<set var="DEBUGRUNTIME">
<if cond="BUILD=='debug'">on</if>
<if cond="BUILD=='release'">off</if>
</set>
<set var="OPTIMIZEFLAG">
<if cond="BUILD=='debug'">off</if>
<if cond="BUILD=='release'">speed</if>
</set>
<set var="WARNINGS">
<if cond="BUILD=='debug'">max</if>
<if cond="BUILD=='release'">no</if>
</set>
<set var="RUNTIMELIBRARY">
<if cond="BUILD=='debug'">dynamic</if>
<if cond="BUILD=='release'">static</if>
</set>
<template id="common" template="wx">
<debug-info>$(DEBUGINFO)</debug-info>
<debug-runtime-libs>$(DEBUGRUNTIME)</debug-runtime-libs>
<optimize>$(OPTIMIZEFLAG)</optimize>
<warnings>$(WARNINGS)</warnings>
<if cond="FORMAT=='msvc'">
<if cond="WX_SHARED=='1'">
<cxxflags>/DWXUSINGDLL</cxxflags>
</if>
<if cond="BUILD=='release'">
<threading>multi</threading>
</if>
</if>
<runtime-libs>$(RUNTIMELIBRARY)</runtime-libs>
<wx-lib>net</wx-lib>
<wx-lib>core</wx-lib>
<wx-lib>base</wx-lib>
</template>
<exe id="test" template="common">
<app-type>console</app-type>
<include>server/include</include>
<sources>$(fileList('server/db/test/*.cpp'))</sources>
</exe>
</makefile>
按以上的步骤,将相关设置在更改后,那么所有的项目成员都不需要因为vs中的input lib,dirs等问题困扰了。
试试bake release后,查看一下Makefile.vc的内容对不对,同时nmake就可以看到编译过程了.