更改.c文件的注释时,scons仍然重新编译它?

Tro*_*yvs 0 linux rebuild dependencies gcc scons

据说scons使用MD5签名作为默认决策来确定源文件是否需要重新编译.例如,我有SConstruct如下:

Library('o.c')
Run Code Online (Sandbox Code Playgroud)

我的oc是:

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

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

gcc -o o.o -c o.c
scons: done building targets.
Run Code Online (Sandbox Code Playgroud)

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

Decider('MD5').
Run Code Online (Sandbox Code Playgroud)

还是一样的结果.

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

谢谢!

dir*_*hle 5

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

如果您不喜欢这种行为,您可以编写并使用自己的Decider函数,该函数将忽略对您的喜好的评论更改.请查看第6.1.4节中的"编写自己的自定义功能决胜局" UserGuide,看看如何可以做到这一点.