.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" 节,了解如何做到这一点。
据说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" 节,了解如何做到这一点。