scons 自定义决策函数是否需要成为 class 成员?

Does scons customized decider function require to be class member?

我从网上搜索了如何在scons中编写我们自己的决策函数,至于how/when应该重建一个源文件,像这样:

Program('hello.c')
def decide_if_changed(dependency,target,prev_ni):
 if self.get_timestamp()!=prev_ni.timestamp:
  dep=str(dependency)
  tgt=str(target)
  if specific_part_of_file_has_changed(dep,tgt):
   return true;
 return false;
Decider(decide_if_changed)

我有一个 hello.c,没问题,但是当 运行 scons 时提示 python 错误:

$ scons -Q
scons: *** [o.o] NameError : global name 'self' is not defined

self 是提及 class 成员函数的 python 关键字。在 SContruct 文件中,有一个 class 但只有一个 decide_if_changed 函数。问题:

Do I have to add a class here? Why it prompts python error saying 'self' is not defined?

This example script a function call of specific_part_of_file_has_changed, is it a scons's own file that can be called by any pythong statement?

名称 self 未定义,因为文档中有错字。决策者的第二行应该是:

if dependency.get_timestamp()!=prev_ni.timestamp:

实现 specific_part_of_file_has_changed() 方法(或任何类似的确定文件是否已更改的系列步骤)完全取决于您..."customer"。毕竟你确实想要 "custom decider",对吧? ;)