据说 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 节“编写您自己的自定义决策函数”看看如何做到这一点。
关于linux - .c 文件的注释改了,scons 还是要重新编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39832072/