我正在将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模块,我只使用预构建事件。
如何将生成的文件包含在编译中,还将其从源代码管理和项目管理中排除?
或者,有没有更好的方法来做我想要的?
答案 0 :(得分:3)
编译器(cl.exe)具有预定义的宏__DATE__
and __TIME__
以及__TIMESTAMP__
。您可以将仅包含这些文件的文件编译为预链接步骤。
答案 1 :(得分:0)
另一种方法是使用预处理器来包含生成的文件:
#include "BuildTimeStamp.c"
包含此文件的文件可以是源代码管理下项目中的一个文件。
答案 2 :(得分:0)
我可能迟到了10年,但我喜欢这种简单的方法。我的解决办法是
我的预构建步骤:
echo #define DBJ_BUILD_TIMESTAMP __DATE__ " " __TIME__ > build_time_stamp.inc
那个小公司,在C和C ++中都包含一个编译时间常数。我通常将其包含在我的main.cpp
#include "build_time_stamp.inc"
由于它是在每次构建时生成的,因此会引发(重新)编译main.cpp
用法可能是
printf( "\nBuild time stamp: " DBJ_BUILD_TIMESTAMP );
如果您不希望通过GIT进行提交/同步/推送,那么在每次构建后,该inc文件都不要将其包含在项目中。无论如何,如果您想在更复杂的情况下使用它,只需将其保持在全局常量中即可:
constexpr auto build_time_stamp = DBJ_BUILD_TIMESTAMP ;
享受...