SCons 并没有真正允许你想做的事情。必须构建的每个节点都有一个与之关联的命令行操作。存储命令行字符串的 MD5 校验和,如果这些校验和发生更改,则会触发重建。如果更改警告标志,则用于构建目标文件的命令行会更改,即使生成的目标文件相同。
如果你真的下定决心,总有办法绕过它。例如,您可以更改在 SCons 内计算 MD5 总和的方式。作为概念证明,我让 SCons-Wall
在考虑重建时忽略了该标志。这是通过将以下代码放在 SConstruct 文件的顶部来更改报告与操作关联的命令行的方法来完成的。
import SCons
import types
SCons.Action.ActionBase.get_contents_orig = SCons.Action.ActionBase.get_contents
def get_contents(self, *args, **kw):
norebuild = ("-Wall",)
cnt = self.get_contents_orig(*args, **kw).split()
cnt_norebuild = " ".join(i for i in cnt if i not in norebuild)
return cnt_norebuild
SCons.Action.ActionBase.get_contents = types.MethodType(
get_contents, None, SCons.Action.ActionBase)
这对我来说是一个非常简单的 SConstruct 文件。不过,这是一个非常糟糕的 hack,并且可能会在不同版本之间或更复杂的构建之间中断。
因此,总而言之,可以按照您的要求进行操作,但非常不明智。