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

标签 linux gcc dependencies scons rebuild

据说 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/

相关文章:

c# - Visual Studio clean 解决方案不会删除所有被移动的 dll/项目引用

java:找出丢失符号的原始包

Python 脚本在打印前打印 os.system 的输出

c++ - Linux - 运行 valgrind 时不显示源文件/行

delphi - d2007设置对外部程序的依赖

c - 如何将 Windows 中的简单程序与 Mingw GCC 链接

arrays - 向量化二维数组访问 (GCC)

linux - 将 ROM 加载到 Emu OS

java - 操作系统(linux)如何杀死java程序?当我硬终止一个 java 进程时,jvm 会发生什么?

c++ - 操作系统原生 2D API 与 OpenGL