分享

自动增加svn库版本号(转) Re: 在Makefile动态生成程序版本号的方法(转)

 娱天乐 2014-07-30
自动增加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,每日构造还是没问题的

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多