自动增加svn库版本号

 

 

hello.cpp

 

  1. #include <iostream>
  2. #include "svn_version.h"
  3. using namespace std;
  4. int main()
  5. {
  6.         cout << "Hello World!" << endl;
  7.         cout << "svn recv: " << SVN_RECV << endl;
  8.         return 0;
  9. }

Makefile.am


 

  1. AUTOMAKE_OPTIONS = foreign
  2. bin_PROGRAMS = hello
  3. hello_SOURCES = hello.cpp
  4. #hello_DEPENDENCIES = svn_auto_version
  5. BUILT_SOURCES= svn_auto_version
  6. svn_auto_version:
  7.         LANG="";/
  8.         recv=`svn info | sed -n '/^Revision: /'p | awk -F': ' '{print $$2}'`;/
  9.         syned=`test 0 -eq $(shell svn st -q | wc -l ) || echo ' m'`;/
  10.         echo -e "/* svn_version.h  Generated from Makefile.am for auto record svn revision.  *//n/n/
  11.                 #ifndef _SVN_AUTO_RECV_H_/n/
  12.                 #define _SVN_AUTO_RECV_H_/n/n/
  13.                 /* m means work copy has modified files.        *//n/
  14.                 #define SVN_RECV /"$$recv$$syned/"/n/n/
  15.                 #endif/n" > svn_version.h

 

原理很简单:在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,每日构造还是没问题的

 

你可能感兴趣的:(SVN,UP,makefile,dependencies)