【问题标题】:Adding a compilation time stamp ONLY when changes occurred in the project (C)仅在项目发生更改时添加编译时间戳 (C)
【发布时间】:2012-06-14 19:25:49
【问题描述】:

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

标准且简单的方法是:

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

  2. 已经准备好一个 .c 文件,如果需要的话,包含 timedate 和其他东西,只有在清理项目后才编译它。更改项目中的源文件或头文件不会导致标记被更改(除非我们先清理项目)。

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

【问题讨论】:

    标签: c eclipse compilation makefile


    【解决方案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 commitgit pull 时创建(未版本化的)时间戳 .c 文件。

      【讨论】:

      • 这是一个好主意,虽然它依赖于 VCS(并非所有工具都支持这种钩子),但它看起来非常适合将它与我的琐碎选项 (2) 结合使用。钩子只会触及标记文件,因此下次将被编译。 +1 为您指明方向。 Anatoly 技巧有点通用,不依赖于 VCS,所以我会接受它。非常感谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-12
      • 2016-05-30
      • 2015-01-15
      • 2014-02-26
      • 2022-07-10
      • 1970-01-01
      • 2018-07-17
      相关资源
      最近更新 更多