对于源码SVN受控的项目,很希望SVN版本号作为软件版本的一部分,在Linux使用shell脚本很容易搞定这个事情,但在windows下的嵌入式项目就么有那么容易。最近在IAR中成功使用pre-build功能搞定了这个事情,具体见如下的步骤:

1. 首先保证你的svn客户端支持控制台命令,我使用的是tortoiseSVN,在安装时注意勾选tortoiseSVN的命令行支持;

2. 编写一个windows脚本ProduceVersion.bat放到IAR的工程目录下(也即和*.eww同一个目录),该脚本的内容如下:

echo // This file is automatically generated or updated^, please don't edit it. > %1\SVNVersion.h
echo #pragma once >> %1\SVNVersion.h
echo #define SVN_VERSION \>> %1\SVNVersion.h
svnversion %1^" >> %1\SVNVersion.h
exit

3. 在IAR的Proj->Options->Build Actions->Pre-Build command line中写入:cmd /c start $PROJ_DIR$\ProduceVersion.bat $PROJ_DIR$

4. 在编译的时候IAR就会先调用ProduceVersion.bat,它将生成一个SVNVersion.h的文件,该文件的内容为:

// This file is automatically generated or updated, please don't edit it. 
#pragma once 
#define SVN_VERSION \
171M

5. 在程序中我们就可以包含SVNVersion.h这个文件,并且使用SVN_VERSION这个宏了。细心的你应该发现问题了吧,SVN_VERSION定义成了171M,171M既不是又不是字符串也不是整数,那么问题来了,如何使用这个结果?关键的来了!见下面的代码片段:

#define __MY_STR(V) ""#V""
#define MY_STR(V) __MY_STR(V)
static const char svnVersion[] = {MY_STR(SVN_VERSION)};
这样你就可以在你的代码中使用svnVersion这个数组了。


 

Logo

更多推荐