1

我试图弄清楚当 SCons 将工件从缓存目录(由 CacheDir 提供)复制到使用的硬链接时如何覆盖该行为。

我目前的尝试

def link_or_copy_file(class_instance, src, dst):
    # do hardlinking instead...

SCons.Defaults.DefaultEnvironment()._copy_from_cache = link_or_copy_file
SCons.Defaults.DefaultEnvironment()._copy2_from_cache = link_or_copy_file

env = Environment()

env._copy_from_cache = link_or_copy_file
env._copy2_from_cache = link_or_copy_file

对后续使用没有影响env。该函数link_or_copy_file永远不会被调用。怎么了?

不能以这种方式覆盖 Python 类成员函数。

更新:另请注意,我在env.Decider()被调用后执行此操作,因为此函数可能会覆盖成员_copy_from_cache_copy2_from_cache.

4

1 回答 1

1

我们终于想通了

import SCons.Environment
SCons.Environment.Environment._copy_from_cache = link_or_copy_file
SCons.Environment.Environment._copy2_from_cache = link_or_copy_file

工作。

于 2015-01-15T14:30:49.827 回答