C++ 记录编译源代码时的时间

C++ 记录编译源代码时的时间,c++,c,time,compilation,C++,C,Time,Compilation,我有一个源文件。当我编译代码时,我想让可执行文件记住它是何时构建的。我想知道这是否可能。例如: int main(){ time_t t = ??? // Time when this line is compiled //print out value of t in certain format. return t } 您可以通过将时间记录为字符串 如果您想要一个时间\u t,您必须在运行时转换它。您可以使用\uuuuuuu时间\uuuu和\uuu日期\

我有一个源文件。当我编译代码时,我想让可执行文件记住它是何时构建的。我想知道这是否可能。例如:

 int main(){
    time_t t = ???  // Time when this line is compiled
    //print out value of t in certain format. 
    return t 
 } 

您可以通过将时间记录为字符串


如果您想要一个
时间\u t
,您必须在运行时转换它。

您可以使用
\uuuuuuu时间\uuuu
\uuu日期\uuuu
宏来获取时间。这是一根线,所以你需要从那里开始

我举了一个简单的例子:

#include <time.h>
#include <iostream>
#include <cassert>

time_t build_time() {
  static const char *built = __DATE__" "__TIME__;  
  struct tm t;
  const char *ret = strptime(built, "%b %d %Y %H:%M:%S", &t);
  assert(ret);
  return mktime(&t);
}

int main() {
  std::cout << build_time() << std::endl;
}
#包括
#包括
#包括
时间\u t构建时间(){
静态常量char*builded=\uuuuuu日期\uuuuuuuuuuuuuuuuu时间\uuuuuuuuuuu;
struct-tm-t;
const char*ret=strtime(生成,“%b%d%Y%H:%M:%S”、&t);
断言(ret);
返回时间(&t);
}
int main(){

std::cout这并不能完全解决您的问题,但在visual studio中,您可以添加后期生成事件。添加一些控制台命令,如创建新文件或更新现有文件,以查看上次成功生成的时间。我这样做是为了将报表文件复制到需要它们的目录中。我只是生成了我的项目,它们都已存在转到那里:)

读取代码中可执行文件的上次修改日期和时间属性。

您还可以使用预构建事件创建一个包含编译时间的变量的
cpp
文件。这不会告诉您源文件是何时编译的。它会告诉您exe文件是何时创建的。可能有些吹毛求疵,但对于大型文件来说ce认为,从编译第一个CPP文件到最终编写EXE文件之间可能需要很多时间。我相信这就是OP所希望的,他说“我希望执行文件记住它是何时构建的”。我可能误解了这里的问题,但我觉得他想知道最后一次准备可执行文件的时间。或者选项2:从makefile运行shell脚本。只需不断添加当前的日期和时间值。这样,您将有一个巨大的日志,如果需要,可以从代码中读取。但是如果复制可执行文件,copy可能会以不同的时间戳结束(取决于复制方法)。这无法准确报告生成的时间。代码有2个错误(即使在7年之后)。struct tm t;不会初始化其成员,并且strtime()不会全部设置它们,导致mktime()的潜在无效结果
。此外,
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu