如何在 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
更改进程的时间:
- Faking time without changing Windows system clock
- NirSoft RunAsDate - Run a program with the specified date/time
- Running an application at a different time/date
- Is there any software or hardware which lets you stop, slow down, speed up or even reverse time?
是否有可能在 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
更改进程的时间:
- Faking time without changing Windows system clock
- NirSoft RunAsDate - Run a program with the specified date/time
- Running an application at a different time/date
- Is there any software or hardware which lets you stop, slow down, speed up or even reverse time?