make时自动更新-v输出的build版本

其实也没啥神奇的,无非就是脚本和C宏定义。

首先,是脚本部分,Subversion包中有个svnversion命令,有了它就好办了,
在Makefile中将去版本命令写好后作为参数传给gcc/g++/cl等等之类,用-D在编译器参数中定义版本宏。

CC = gcc
buildinfo=`svnversion` bt:`date +'%Y-%m-%d %H:%M:%S'`
CFLAGS= -m32 -W -Wall -I. -g -DBUILD_INFO="\"interface:1.3 svn:$(buildinfo)\""
LIBS = -lpthread -L./libworker -lworker 
linux_LIBS= -Wl,-rpath,.:./libworker:../lib -ldl $(LIBS)
TARGET = zw
all:libworker/libworker.so
	$(CC) $(CFLAGS) hello.c mongoose.c $(linux_LIBS) -o $(TARGET)
	@echo "         #############################"
	@echo "              All Done svn:`svnversion` "
	@echo "         #############################"
... ...

然后。。。然后?然后用这个宏输出就是了呀。

... ...
while ((ret = getopt(argc, argv, "vc:")) != -1)
{
    switch (ret) {
    case 'v' :
        fprintf(stdout, "%s %s\n", argv[0], BUILD_INFO);
        _exit(-1);
... ...

如此这般,就不用每次编译改输出版本里的svn版本号了。之后不管debug还是问题追踪都跟着这个版本走,甚是方便呦。

[cz@localhost zhuowang]$ ./zw -v
./zw interface:1.3 svn:60M bt:2012-11-01 11:24:45

其中60M的60是svn版本号,M表示有未经过提交的修改。所以一定要及时Commit,不然可就白费劲喽。

发表评论?

0 条评论。

发表评论


请输入正确的验证码