.c 文件的注释改了,scons 还是要重新编译?

When changing the comment of a .c file, scons still re-compile it?

据说scons默认使用MD5签名来判断一个源文件是否需要重新编译。例如。我有如下的 SConstruct:

Library('o.c')

我的 o.c 是:

$ cat o.c
    /*commented*/
    #include<stdio.h>
    int f(){
      printf("hello\n");
      return 2;
    }

运行 scons 并删除注释行,再次 运行 scons。我希望 scons 不应该再次编译它,但实际上它是:

gcc -o o.o -c o.c
scons: done building targets.

如果我更改 SConstruct 文件以添加一行:

Decider('MD5').

还是一样的结果。

我的问题是:如何确保对于 scons,在更改源文件注释时,它们不会被重新构建?

谢谢!

如您正确所述,SCons 使用源文件的 MD5 哈希和来确定它是否已更改(基于内容),并且似乎需要重建目标(因为其依赖项之一已更改). 通过添加或更改注释,文件的 MD5 和会发生变化...因此触发触发器。

如果您不喜欢这种行为,您可以编写并使用您自己的 Decider 函数,它将根据您的喜好忽略评论更改。请查看 UserGuide 中的第 6.1.4 "Writing Your Own Custom Decider Function" 节,了解如何做到这一点。