首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何自动将构建日期转换为代码可见的常量?

如何自动将构建日期转换为代码可见的常量?
EN

Stack Overflow用户
提问于 2011-12-09 04:32:05
回答 5查看 7.3K关注 0票数 22

我想在我的代码中定义一个常量,用于保存构建可执行文件的日期。我很自然地想让这个过程自动化。

我知道我可以编写一个预编译脚本,例如使用Perl来写出一个包含日期的.inc文件。我更喜欢使用环境变量或构建变量的更轻量级的解决方案。msbuild是否提供了任何有用的变量?有没有人知道解决这个问题的更好的办法?

EN

回答 5

Stack Overflow用户

发布于 2011-12-09 05:30:52

如果你使用/拥有JCL,那么jclPEImage.PeReadLinkerTimeStamp()会做你想要的事情。旧版本的Delphi没有设置链接器时间戳,但新版本可以(即它似乎可以在D2010上工作)。

票数 9
EN

Stack Overflow用户

发布于 2017-05-03 15:29:38

这段代码在较新的Delphi版本中工作,结合了获取时间并将其转换为本地时间。

function GetExeBuildTime: TDateTime;
var
  LI: TLoadedImage;
  {$IF CompilerVersion >= 26.0}
  m: TMarshaller;
  {$IFEND}
  timeStamp: Cardinal;
  utcTime: TDateTime;
begin
  {$IF CompilerVersion >= 26.0} //XE7 requires TMarshaller to convert to PAnsiChar
  Win32Check(MapAndLoad(PAnsiChar(m.AsAnsi(ParamStr(0)).ToPointer), nil, @LI, False, True));
  {$ELSE}
  Win32Check(MapAndLoad(PAnsiChar(AnsiString(ParamStr(0))), nil, @LI, False, True));
  {$IFEND}
  timeStamp := LI.FileHeader.FileHeader.TimeDateStamp;
  UnMapAndLoad(@LI);

  utcTime := UnixToDateTime(timeStamp);
  Result := TTimeZone.Local.ToLocalTime(utcTime);
end;
票数 2
EN

Stack Overflow用户

发布于 2011-12-09 19:22:06

我使用FinalBuilder完成所有的构建,因此很容易添加一个实用程序,该实用程序将在编译之前更新任何源文件,以搜索和修改变量或常量的定义。我用这种方式构建版本号,日期,任何有意义的东西。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8437300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档