仅当项目中发生更改时添加编译时间戳 (C)



我目前正在创建一个新的C项目,我遇到了需要用一些数据(包括时间和日期)标记每个编译的过程。

标准和简单的方法是:

  1. 通过简单的脚本生成 .c 文件,添加所需的信息。使用此解决方案,项目将始终生成一个新的工件(例如.o),即使项目本身没有发生任何更改(没有更改任何文件)。

  2. 已经准备好一个.c文件,如果需要,可以包含时间日期和其他内容,仅在清理项目后进行编译。对项目中的源文件或头文件的更改不会导致标记更改(除非我们先清理项目)。

我正在寻找介于两者之间的东西:当项目文件更改时,请确保添加编译标记。

我不确定 eclipse,但如果你使用 make 和 makefiles,你可以在以下示例中使用这个想法(在 cygwin 环境中工作)。

make执行链接命令(最后一个)时,它还会使用嵌入的时间编译文件。当可执行文件是最新的时,不会调用链接,因此时间戳不会更改。为了使其正常工作,您不应通知make带有时间戳的文件是任何内容的先决条件。

# Makefile
a.exe: a.o # note: doesn't depend on mytime.c
    gcc a.o mytime.c -o a.exe # note: cannot use ld, must link with gcc
a.o: a.c
    gcc -c a.c
// mytime.c
char* mytime = __TIME__;
// a.c
#include <stdio.h>
extern char* mytime;
int main()
{
    printf("%sn", mytime);
}

您还可以使用 git 钩子在运行git commitgit pull时创建(未版本控制的)时间戳 .c 文件。

最新更新