hack3er 发表于 2014-3-21 17:29:43

如何在程序里每编译一次自动更新(递增)版本号?

如何在程序里每编译一次自动更新(递增)版本号?
可以根据编译的时间日期来自动生成,如build 1.6.8.1223
后面1223这个每次编译都递增。。。

hack3er 发表于 2014-3-21 17:45:51

stdio 发表于 2014-3-21 17:40
用MAKEFILE吗?啥编译器?在启动编译器之前,执行一个命令,更新一下VER.H之类的,应该可以的吧? ...

IAR或KEIL之类的,
在启动编译器之前,执行一个命令,更新一下VER.H之类的
这个要怎么做到?
_TIME_和_DATA_这个信息太长了
想得到唯一递增就必须至少用到年、月、日、时、分
不然没有唯一递增性。

我需要一个算法把_TIME_和_DATA_的信息算成一个每次都会递增的4位数。。

hack3er 发表于 2014-3-21 17:46:50

error_dan 发表于 2014-3-21 17:41
用time宏是一种方法,获取到系统时间以后再用宏展开的方式写一个宏函数实现版本号递增.
还有一种办法就是写 ...

_TIME_和_DATA_这个信息太长了
想得到唯一递增就必须至少用到年、月、日、时、分
不然没有唯一递增性。

我需要一个算法把_TIME_和_DATA_的信息算成一个每次都会递增的4位数。。

psl_87 发表于 2014-3-21 17:30:48

这个想法挺好,同求。。。

hack3er 发表于 2014-3-21 17:36:21

psl_87 发表于 2014-3-21 17:30
这个想法挺好,同求。。。

确实,每次手动改版本号经常忘掉,
时间长了老会出现版本号一样的程序,实际不是同一个程序
不知道哪个是最新的,修改了啥。。

qiushui_007 发表于 2014-3-21 17:38:25

好想法. 目前没思路啊

HadesHe 发表于 2014-3-21 17:38:54

C语言支持_TIME_的吧?兄弟

stdio 发表于 2014-3-21 17:40:54

用MAKEFILE吗?啥编译器?在启动编译器之前,执行一个命令,更新一下VER.H之类的,应该可以的吧?

error_dan 发表于 2014-3-21 17:41:35

用time宏是一种方法,获取到系统时间以后再用宏展开的方式写一个宏函数实现版本号递增.
还有一种办法就是写一个小程序,每次编译之前运行一下(IDE有接口,可以做成自动化的)往指定的版本文件里面写一个版本号,自己递增,这样灵活性更大一些~

hack3er 发表于 2014-3-21 17:43:49

HadesHe 发表于 2014-3-21 17:38
C语言支持_TIME_的吧?兄弟

_TIME_和_DATA_这个信息太长了
想得到唯一递增就必须至少用到年、月、日、时、分
不然没有唯一递增性。

我需要一个算法把_TIME_和_DATA_的信息算成一个每次都会递增的4位数。。

four_zhg 发表于 2014-3-21 17:51:33

我也愁版本的问题呢

stdio 发表于 2014-3-21 17:55:10

我用的IAR6.5,KEIL没用过不清楚有没有。

takashiki 发表于 2014-3-21 18:40:40

似乎没有这样的功能哦,但是我觉得你的提议不错,所以我给你写了一个小程序。
楼上的IAR中,Keil的Options->User->Run User Programs Before Build/Rebuild中,填入"路径\GenVer 文件名",就OK了。注意,路径和文件名最好都用双引号引起来。

文件名的内容会自动生成,内容如下:#define _AUTOINC_VER_ 0最后的0会每编译一次,_AUTOINC_VER_自动递增1,其他文件#include这个文件就可以了。如果你没有写入任何内容,则自动生成上述内容。
程序在这里,非常小,使用Delphi 7编写,WinXP编译,代码未压缩,10K。


开源代码,使用了KOL库,这样才能最小化嘛,很多杀软会报病毒,哈哈,信不过的自己编译去。program GenVer;

{$APPTYPE CONSOLE}

uses
KOL;

var
fn, s: string;
cnt: Integer;

begin
if ParamCount < 1 then begin
    Writeln('嘿,你怎么着也要弄个参数吧!');
end else begin
    fn := ParamStr(1);
    if FileExists(fn) then begin
      s := Trim(StrLoadFromFile(fn));
      if Length(s) = 0 then cnt := -1
      else cnt := Str2Int(Trim(Copy(s, Pos('_AUTOINC_VER_', s) + 14, 10)));
      StrSaveToFile(fn, '#define _AUTOINC_VER_ ' + Int2Str(cnt + 1));
    end else begin
      Writeln('嗯,用法为:GenVer 文件名,如果含有空格请加上双引号');
    end;
end;

end.

wsm80828 发表于 2014-3-21 18:52:10

楼上不错

hack3er 发表于 2014-3-21 21:27:19

takashiki 发表于 2014-3-21 18:40
似乎没有这样的功能哦,但是我觉得你的提议不错,所以我给你写了一个小程序。
楼上的IAR中,Keil的Options- ...

谢谢,感谢分享,明天上班试试。。{:lol:} {:handshake:}

hack3er 发表于 2014-3-21 21:28:04

stdio 发表于 2014-3-21 17:55
我用的IAR6.5,KEIL没用过不清楚有没有。

谢谢,看来我对IAR认识还不够啊。。{:lol:}

babyhua 发表于 2014-3-21 23:51:53

takashiki 发表于 2014-3-21 18:40
似乎没有这样的功能哦,但是我觉得你的提议不错,所以我给你写了一个小程序。
楼上的IAR中,Keil的Options- ...

ding!!!!!!!!!!!!!!!!!!

hack3er 发表于 2014-3-22 15:22:59

stdio 发表于 2014-3-21 17:55
我用的IAR6.5,KEIL没用过不清楚有没有。

想知道这个要怎么用。。{:shutup:}
页: [1]
查看完整版本: 如何在程序里每编译一次自动更新(递增)版本号?