获取编译日期

获取编译日期

我正在尝试从 linux 命令中提取编译日期(或者 cpp 也可以)。我在用:

stat -c %z ./myProgram.bin

但是,如果我myProgram.bin通过 ssh 复制到另一个地方,stat 命令基本上会给出复制的日期。

如何获得真实的编译日期?谢谢。

答案1

托马斯·迪基的回答对于任何 (ELF) 二进制文件,总体上解决了这个问题。鉴于您的问题的措辞方式,您可能会发现__DATE____TIME__预定义的宏有用;它们允许在程序中引用编译日期和时间(因此程序知道自己的编译日期和时间)。

这是一个简单的例子:

#include <stdio.h>

int main(int argc, char **argv) {
    printf("This program was compiled on %s at %s.\n", __DATE__, __TIME__);
    return 0;
}

答案2

stat -c %z显示文件的上次创建/更新时间,并且不可更改或保存。因此,如果您将文件复制到其他位置,它将始终获得新的当前创建时间。您要寻找的是stat -c %y显示上次修改时间,大多数处理文件和目录的工具通常都会保留该时间。

答案3

您可以复制保留修改时间,例如,

cp --preserve=timestamps source destination

或(更一般地说:模式,所有权时间戳

cp -p source destination

尽管在某些情况下,保留所有权不受欢迎。

同样,您可以使用 scp 的选项复制到远程系统-p

scp -p source remote:destination

scp没有模式等的单独选项。因为它以给定的方式运行偏僻的权限,它没有同时设置远程所有权的功能。由于这些限制,您可能希望tar在远程系统上提取存档,以保留尽可能多的信息。

用于二进制文件的 ELF 格式不包含日期,因此您只能保留文件的修改时间戳。

进一步阅读:

相关内容