Scons AddPostAction导致依赖性检查错误解决方法

use*_*731 5 scons unittest++

在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 )
Run Code Online (Sandbox Code Playgroud)

Gre*_*ill 5

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

env.AddPostAction(curTest, curTest[0].abspath)
Run Code Online (Sandbox Code Playgroud)

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

env.AddPostAction(curTest, lambda *_, **__: os.system(curTest[0].abspath))
Run Code Online (Sandbox Code Playgroud)

对于我的单元测试系统(与您的系统略有不同但有相同的问题),这可以在任何依赖项发生变化时运行单元测试,如果没有任何相关变化则不运行单元测试.