【问题标题】:How to include a build timestamp in a VC++ project?如何在 VC++ 项目中包含构建时间戳?
【发布时间】:2010-11-22 03:01:18
【问题描述】:

我正在将 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 模块,我只使用预构建事件。

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

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

【问题讨论】:

  • FFWD 10 年,并且......我认为这种方法没有任何问题。只有它可以作为宏来完成——#define BUILD_TIMESTAMP __DATE__ " " __TIME__ ,在 C 和 C++ 中实际上是编译时间常数(喘气!)...

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我可能晚了 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 ;
      

    享受...

    【讨论】:

      【解决方案3】:

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

      #include "BuildTimeStamp.c"
      

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

      【讨论】:

        猜你喜欢
        • 2010-09-30
        • 2012-08-14
        • 2022-01-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-21
        • 2013-01-24
        相关资源
        最近更新 更多