仅在项目发生更改时添加编译时间戳 (C)
Posted
技术标签:
【中文标题】仅在项目发生更改时添加编译时间戳 (C)【英文标题】:Adding a compilation time stamp ONLY when changes occurred in the project (C) 【发布时间】:2012-06-14 19:25:49 【问题描述】:我目前正在创建一个新的 C 项目,我遇到了需要用一些数据(包括时间和日期)标记每个编译。
标准且简单的方法是:
通过一个简单的脚本生成一个 .c 文件,添加所需的信息。使用此解决方案,项目将始终生成新的工件(例如 .o),即使项目本身未发生任何更改(未更改任何文件)。
已经准备好一个 .c 文件,如果需要的话,包含 time 、 date 和其他东西,只有在清理项目后才编译它。更改项目中的源文件或头文件不会导致标记被更改(除非我们先清理项目)。
我正在寻找的是介于两者之间的东西: 当项目文件发生变化时,请确保添加编译标记。
【问题讨论】:
【参考方案1】:我不确定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("%s\n", mytime);
【讨论】:
【参考方案2】:您也可以使用 git hook 在运行 git commit
或 git pull
时创建(未版本化的)时间戳 .c 文件。
【讨论】:
这是一个好主意,虽然它依赖于 VCS(并非所有工具都支持这种钩子),但它看起来非常适合将它与我的琐碎选项 (2) 结合使用。钩子只会触及标记文件,因此下次将被编译。 +1 为您指明方向。 Anatoly 技巧有点通用,不依赖于 VCS,所以我会接受它。非常感谢!以上是关于仅在项目发生更改时添加编译时间戳 (C)的主要内容,如果未能解决你的问题,请参考以下文章
Java“常量字符串太长”编译错误。仅在使用 Ant 时发生,在使用 Eclipse 时不会发生