如何在 Visual Studio 中重新定义(覆盖)C++ __DATE__ 和 __TIME__ 预定义的宏?

How to redefine (override) C++ __DATE__ and __TIME__ predefined macros in Visual Studio?

是否有可能在 Microsoft Visual Studio 中重新定义 __DATE____TIME__ 预定义的 C++ 宏(给它们提供默认值以外的值)?

我尝试了编译器选项 /D "__DATE__=\"Feb 10 2021\"" 但我得到:

pch.cpp : warning C4117: macro name '__DATE__' is reserved, '#define' ignored

并没有效果。除了修改代码(或确认 'it is not possible')还有什么想法吗?

原因:我拥有的 C++ 项目的构建由日期宏值进行版本控制(每个构建都从 __DATE__/__TIME__ 值获取其版本)。我需要模拟一个“旧的”构建——基本上是为了欺骗这个版本控制系统。我不需要更改宏值格式。我也知道@Jabberwocky 提到的另一个用户定义宏的选项。

不,你不能。但你也不需要。不要使用 __DATE__ 但例如BUILD_DATE 并添加:

#ifndef BUILD_DATE
#define BUILD_DATE __DATE__
#endif

并编译:

/D "BUILD_DATE=\"Feb 10 2021\"" 

然后你就会得到你想要的确切行为。

但如果你真的不能按照建议用你自己的东西替换 __DATE__,那你就不走运了。

一种方法是伪造 MSVC 感知的时间 cl.exe。这可以通过 运行 虚拟机中的编译器(如 Windows Sandbox)在不同的时间完成,或者使用一些 3rd 方解决方案,如 RunAsDate 更改进程的时间: