5

在 scons 中,我正在尝试制作一个 UnitTest 系统(参见下面的代码),基于这里的一个很好的例子:http: //spacepants.org/blog/scons-unit-test

然而,由于最近 scons 2.0.1 和更新版本中的问题,这种情况下是一个依赖循环,如此处所述:http: //old.nabble.com/AddPostAction-executes-on-first-build-but-not-subsequent- td18360675.html(和其他地方)。

有谁知道解决此问题的好方法或替代解决方案?

代码:

def UnitTest(env, target, source, **kwargs):
  curTest = env.Program(target, source, **kwargs)
  env.AddPostAction(curTest, curTest[0].abspath)
  env.Alias('unit_tests', curTest)
  env.AlwaysBuild(curTest)
  return curTest

SConsEnvironment.UnitTest = UnitTest

mandolineTest = env.UnitTest(target='./codeTest',
  source = mix(['test.cc', 'base.cc'),
  LIBS = default_libs + ['bgl',],
  LIBPATH = default_libs_path, 
  CPPPATH = default_includes )
4

1 回答 1

5

我找到了解决这个问题的方法。通过使用:

env.AddPostAction(curTest, curTest[0].abspath)

似乎 SCons 试图变得聪明并curTest[0].abspath为其自身添加构建依赖项,从而导致了这种循环依赖问题。解决方案是从 SCons“隐藏”命令的执行,这样它就无法弄清楚你在做什么:

env.AddPostAction(curTest, lambda *_, **__: os.system(curTest[0].abspath))

对于我的单元测试系统(与您的略有不同但有相同的问题),这具有在其任何依赖项发生更改时运行单元测试的预期效果,如果没有任何相关更改则不运行它。

于 2012-01-05T22:44:18.693 回答