Scons AddPostAction verursacht die Umgehung der Abhängigkeitsüberprüfung

  • In Scons versuche ich, ein UnitTest-System (siehe Code unten) zu erstellen, basierend auf dem großartigen Beispiel von hier: http://spacepants.org/blog/scons-unit-test

    Allerdings aufgrund eines Problems in letzter Zeit scons 2.0.1 und neuer, dies führt zu einem Abhängigkeitszyklus, wie hier dokumentiert: http://old.nabble.com/AddPostAction-executes-on-first-build-but-not-subsequent-td18360675.html (und anderswo).

    Kennt jemand eine gute Lösung für das Problem oder eine Ersatzlösung für dieses Problem?

    Code:

     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 )
     
    06 January 2012
    Greg Hewgill
1 answer
  • Ich habe eine Problemumgehung für dieses Problem gefunden. Mit

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

    scheint es, dass SCons versucht, clever zu sein und eine Build-Abhängigkeit für curTest[0].abspath hinzuzufügen selbst, was dieses zirkuläre Abhängigkeitsproblem verursacht. Die Lösung besteht darin, die Ausführung des Befehls vor SCons zu "verbergen", damit er nicht herausfinden kann, was Sie tun:

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

    Bei meinem Komponententestsystem (das sich leicht von Ihrem System unterscheidet, jedoch das gleiche Problem hatte), hat dies die gewünschte Wirkung, wenn der Komponententest ausgeführt wird, wenn sich eine seiner Abhängigkeiten ändert, und nicht, wenn sich nichts relevantes geändert hat .

    06 January 2012
    Greg Hewgill