自动增加svn库版本号 . hello.cpp 01.#include <iostream> 02.#include "svn_version.h" 03.04.using namespace std; 05.06.int main() 07.{ 08. cout << "Hello World!" << endl; 09. cout << "svn recv: " << SVN_RECV << endl; 10.11. return 0; 12.} 13.14.15.16. Makefile.am 01.AUTOMAKE_OPTIONS = foreign 02.03.bin_PROGRAMS = hello 04.05.hello_SOURCES = hello.cpp 06.#hello_DEPENDENCIES = svn_auto_version 07.08.BUILT_SOURCES= svn_auto_version 09.10.svn_auto_version: 11. LANG="";/ 12. recv=`svn info | sed -n '/^Revision: /'p | awk -F': ' '{print $$2}'`;/ 13. syned=`test 0 -eq $(shell svn st -q | wc -l ) || echo ' m'`;/ 14. echo -e "/* svn_version.h Generated from Makefile.am for auto record svn revision. *//n/n/ 15. #ifndef _SVN_AUTO_RECV_H_/n/ 16. #define _SVN_AUTO_RECV_H_/n/n/ 17. /* m means work copy has modified files. *//n/ 18. #define SVN_RECV /"$$recv$$syned/"/n/n/ 19. #endif/n" > svn_version.h 20. 原理很简单:在automake生成的Makefile里, all: $(BUILT_SOURCES) 每次执行make all 或check或install时都依赖BUILT_SOURCES, 而BUILT_SOURCES没有达成(svn_auto_version没有输出svn_auto_version),所以每次都要执行,可以保证每次make都会重新输出svn库的版本号 此处不能用_DEPENDENCIES,因为_DEPENDENCIES的执行是在生产临时文件后,连接生成程序前执行的,但hello.cpp需要svn_versino.h文件才能生成临时文件。 问题: 1. 没有检测版本号是否没变化 2. 本地提交之后,需svn up一下才能得到最新的版本号,如果没有此时获得不是最新的svn,每日构造还是没问题的 |
|