有时我们想在编译工程时,使用 svn 的源代码版本号来作为 build 的一个子版本号;或者只是为了识别某个发布版本,与源代码对应起来。
在 Linux 下面有很多的解决方案,使用 svn 工具和一些 shell 命令再加上 -D 选项就可以达到上述目的。
在 Windows 下,使用 Qt Creator 作为开发环境,使用 TortoiseSVN 作为代码管理的客户端工具,该如何实现这个功能呢?
其实主要有两个步骤:一步是如何自动获取 svn 版本号;另一步是如何使用这个版本号,让其自动进入编译过程,在生成的可执行程序中可以访问。
自动获取 svn 控制的源码版本号
TortoiseSVN 有个工具 SubWCRev 可以获取到 working copy 的版本号,具体命令细节可以使用 SubWCRev /? 来查看。
下面是我写的一个 Windows 脚本,自动干这个事情。
@echo off for /f "delims=" %%t in (‘SubWcRev %CD% -f ^| findstr "Updated to revision"‘) do set version=%%t if "%version%" equ "" ( for /f "delims=" %%t in (‘SubWcRev %CD% -f ^| findstr "Mixed revision range"‘) do set version=%%t if "%version%" equ "" ( echo "version string was empty" goto ERROR_EXIT ) else ( echo "version:" %version% ) ) else ( echo "version:" %version% ) REM REM version = "Updated to revision 12345" , or, "Mixed revision range 34046:34064" REM for /f "tokens=4,*" %%a in ("%version%") do ( REM echo %%a set version=%%a if "%version%" equ "" ( echo "version number was empty" goto ERROR_EXIT ) goto FIND_VERSION ) :FIND_VERSION REM REM generate version.h REM echo #ifndef VERSION_H > version.h echo #define VERSION_H >> version.h echo #define SOURCE_CODE_VERSION "%version%" >> version.h echo #endif >> version.h exit 0 :ERROR_EXIT REM REM generate version.h with #error to tell C compiler stop REM echo "generate #error to stop C compiler" echo #ifndef VERSION_H > version.h echo #define VERSION_H >> version.h echo #error "could not extract source code version" >> version.h echo #endif >> version.h exit 1
具体就不再赘述,看脚本应该很清楚,for、if 等脚本命令语法不清楚的,可以搜索,或者以 /? 为参数查看帮助。
将源码版本号编译进可执行文件
我们在前面获取 svn 源码版本号的脚本中生成了一个头文件 version.h ,定义了 SOURCE_CODE_VERSION 这个宏,只要在需要使用版本号的地方,直接使用这个宏即可;当然前提是包含 version.h 头文件,这样在编译时就把源码版本号带进来了。
这个过程,可以结合 Qt Creator ,变成自动的。只需下面几个步骤:
Qt Creator自动使用svn源代码版本号编译,布布扣,bubuko.com
原文:http://blog.csdn.net/foruok/article/details/22665353