强制MS VS2010在每次构建时重建一个cpp文件

时间:2012-11-21 16:11:45

标签: c++ visual-studio-2010

在一个cpp文件中,我使用__DATE__宏来获取编译日期。

它为我提供了该文件的最后编译的日期。但由于文件不经常更改,因此在大多数情况下日期已经过时,有时几个月。

我真正想要的是项目的最后一次构建的日期

是否有设置强制VS2010在项目的每次编译时重建该单个cpp文件? 无论文件有什么变化?

我到目前为止找到的唯一方法是在构建之前修改文件或通过脚本删除创建的obj文件,如果可能的话,我更喜欢VS内部的解决方案。

3 个答案:

答案 0 :(得分:12)

您可以添加一个Pre-Build Step touch(请参阅此thread)文件?

要添加Pre-Build Step,请打开Project Properties,然后Configuration Properties > Build Events > Pre-Build Event,然后在Command Line中添加要执行的命令行。

根据Amitd的建议,显然您也可以使用PowerShell touch该文件,请参阅this以获取解释。

正如Adrian McCarthy在下面的评论中所建议的,删除.obj文件在使用源代码管理并且您希望保留.cpp read-only的上下文中更为可取。使用Visual Studio公开的“宏”,可以轻松删除它们:

del $(TargetDir)sourcefile.obj

来自干杯和赫斯。 - Alf是实现这一目标的另一种方式

nmake (bundled with Visual Studio and the SDK) option /t does a touch, it was once the conventional way to do this for Windows programmers.

答案 1 :(得分:1)

如果您只是触摸文件的日期戳,则可以添加以下预构建步骤。 +,,copy命令的特殊标志,告诉它更新文件的时间戳:

copy file.cpp +,,

答案 2 :(得分:1)

就像Adrian McCarthy的suggested一样,您每次构建项目时都可以删除目标文件。

因此,创建一个调用del命令的构建前事件。根据{{​​3}},您可以使用$(IntDir)宏来引用存储目标文件的目录(您不应该使用$(TargetDir)宏)。

我的命令返回码有问题(错误MSB3073),因此我将命令更改为始终以0退出。

del $(IntDir)datefile.obj & exit 0

在项目配置中的配置属性/构建事件下创建此构建事件。