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

标签 c eclipse compilation makefile

我目前正在创建一个新的 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("%s\n", mytime);
}

关于c - 仅当项目中发生更改时添加编译时间戳 (C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11039993/

相关文章:

c - 如何从文件读取两个字符串并将它们存储在两个单独的数组中

c - 库代码内存占用分析

java - 在 ubuntu 中安装 java、tomcat、eclipse 和 maven

java - Eclipse Juno 提示未安装 SWT,但可用软件面板提示已安装

java - "Failed to initialize App Engine SDK at [path]"是什么意思,如何解决?

c - 为什么我需要 stat 来检查目录是否已经存在?

c - C 中的双向链表 - 链已损坏,不确定在哪里

c++ - "<?="运算符的意义

java - .java 使用或覆盖已弃用的 API。注意 : Recompile with -Xlint:deprecation for details

c - 并行编译一个巨大的 C 文件(最好使用 gcc)