hello.cpp
- #include <iostream>
- #include "svn_version.h"
- using namespace std;
- int main()
- {
- cout << "Hello World!" << endl;
- cout << "svn recv: " << SVN_RECV << endl;
- return 0;
- }
Makefile.am
- AUTOMAKE_OPTIONS = foreign
- bin_PROGRAMS = hello
- hello_SOURCES = hello.cpp
- #hello_DEPENDENCIES = svn_auto_version
- BUILT_SOURCES= svn_auto_version
- svn_auto_version:
- LANG="";/
- recv=`svn info | sed -n '/^Revision: /'p | awk -F': ' '{print $$2}'`;/
- syned=`test 0 -eq $(shell svn st -q | wc -l ) || echo ' m'`;/
- echo -e "/* svn_version.h Generated from Makefile.am for auto record svn revision. *//n/n/
- #ifndef _SVN_AUTO_RECV_H_/n/
- #define _SVN_AUTO_RECV_H_/n/n/
- /* m means work copy has modified files. *//n/
- #define SVN_RECV /"$$recv$$syned/"/n/n/
- #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,每日构造还是没问题的