2011-11-21 20 views
5

W SCons, ja próbuje uczynić system unittest (patrz kod poniżej), w oparciu o wielkiej przykład stąd: http://spacepants.org/blog/scons-unit-testSCons AddPostAction powoduje Zależność Sprawdź błąd obejście

Jednak ze względu na problem w ostatnich SCons 2.0.1 i nowsze, w tym przypadku cykl zależności, jak udokumentowano tutaj: http://old.nabble.com/AddPostAction-executes-on-first-build-but-not-subsequent-td18360675.html (i gdzie indziej).

Czy ktoś wie o dobrym rozwiązaniu zastępczym lub zastępczym tego problemu?

Kod:

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) 

Odpowiedz

5

znalazłem obejście tego problemu. Za pomocą:

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

wydaje się, że SCons stara się być mądry i dodać zależność budowania curTest[0].abspath do siebie, co powoduje tę okrągłą problemu uzależnienia. Rozwiązaniem jest „ukryć” wykonanie polecenia z SCons więc nie może dowiedzieć się, co robisz:

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

Na moim systemie testowym jednostka (który jest nieco inny od Ciebie, ale miałem ten sam problem), ma to pożądany efekt podczas uruchamiania testu jednostki, gdy zmienia się jakakolwiek z jego zależności, i nie uruchamia go, jeśli nic istotnego się nie zmieniło.

Powiązane problemy