如何找出编译源代码的日期?

Fab*_*ian 3 c++ compilation date

是否可以存储和显示我的项目编译日期?

我想在程序启动时打印这个日期,以便知道使用的是哪个版本.目前,我正在手工完成这项工作,这相当麻烦.

我正在使用Visual Studio 2010.

Som*_*ude 8

C++指定有一个特殊的预处理器宏__DATE__,它是编译发生时的字符串文字.还有一个相应的__TIME__宏.

你可以使用这样的:

const std::string compilation_date = __DATE__;
const std::string compilation_time = __TIME__;

...

std::cout << "This source file was compiled on date " << compilation_date
          << " and at the time " << compilation_time << '\n';
Run Code Online (Sandbox Code Playgroud)

  • 最好使用 const char Compilation[],这样您就可以通过符号查找在二进制文件中找到字符串,甚至无需运行程序。您还可以避免重新链接二进制文件并直接使用 binutils 和 dd 编辑字符串。 (2认同)

Nia*_*all 5

您可以使用__DATE____TIME__ 宏-在此处查看“预定义的宏”

作为示例,如下所示:

#include <iostream>
int main()
{
    using namespace std;
    cout << "Compiled on: " << __DATE__ << endl;
    cout << "Compiled at: " << __TIME__ << endl;
}
Run Code Online (Sandbox Code Playgroud)

您将修改消息并根据需要使用。

您甚至可以考虑将其构建为更大的宏或命名变量。

#include <iostream>
const char* const COMPILED = __DATE__ " @ " __TIME__;
int main()
{
    using namespace std;
    cout << "Compiled: " << COMPILED << endl;
}
Run Code Online (Sandbox Code Playgroud)

如果“版本”信息与源代码控制位置或数据(例如提交编号)相关联,则可以通过某种构建步骤或命令行定义将数据包含在构建中。您还应该考虑增量构建对日期和时间的影响。我假设“发布”版本不是基于增量的,如果是这样,则在包含日期和时间数据的文件上存在“接触”。