如何在VC ++项目中包含构建时间戳?

时间:2009-08-23 22:14:01

标签: visual-studio build visual-c++

我正在将makefile项目转换为Visual Studio VC ++项目。它实际上是C源代码。

我在makefile中的一个陈述是:

echo char * gLibraryBuildSig ="%DATE% %TIME%"; > BuildTimestamp.c

这会产生一个C源文件,其中包含一行:

char * gLibraryBuildSig ="Sun 08/23/2009 17:56:05.05"; 

在makefile中,然后使用cl.exe编译所有C源代码,并在链接后删除BuildTimestamp.c文件。这给了我一个全局符号,它将bubild时间作为字符串提供。

如何在VS2008项目中执行相同的操作?请记住,这不是MSBuild。

我在那里分道扬..要在Visual Studio中的构建时生成C模块,我只使用预构建事件。

alt text

如何将生成的文件包含在编译中,还将其从源代码管理和项目管理中排除?

或者,有没有更好的方法来做我想要的?

3 个答案:

答案 0 :(得分:3)

编译器(cl.exe)具有预定义的宏__DATE__ and __TIME__以及__TIMESTAMP__。您可以将仅包含这些文件的文件编译为预链接步骤。

答案 1 :(得分:0)

另一种方法是使用预处理器来包含生成的文件:

#include "BuildTimeStamp.c"

包含此文件的文件可以是源代码管理下项目中的一个文件。

答案 2 :(得分:0)

我可能迟到了10年,但我喜欢这种简单的方法。我的解决办法是

  1. 我的预构建步骤:

     echo #define DBJ_BUILD_TIMESTAMP __DATE__ " " __TIME__  > build_time_stamp.inc
    
  2. 那个小公司,在C和C ++中都包含一个编译时间常数。我通常将其包含在我的main.cpp

     #include "build_time_stamp.inc"
    

由于它是在每次构建时生成的,因此会引发(重新)编译main.cpp

  1. 用法可能是

    printf( "\nBuild time stamp: "  DBJ_BUILD_TIMESTAMP );
    
  2. 如果您不希望通过GIT进行提交/同步/推送,那么在每次构建后,该inc文件都不要将其包含在项目中。无论如何,如果您想在更复杂的情况下使用它,只需将其保持在全局常量中即可:

     constexpr auto build_time_stamp = DBJ_BUILD_TIMESTAMP ;
    

享受...