2011-11-21 7 views
5

依存性チェックエラーが発生し、私はここからの素晴らしい例に基づいて、(以下のコードを参照してください)unittestのシステムを作るしようとしています:http://spacepants.org/blog/scons-unit-testSConsはAddPostActionはsconsのでは回避策

をしかし昨今の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) 

答えて

5

私はこの問題の回避策を見つけました。使用することにより:

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

SConsは賢いことと、この循環依存の問題を引き起こし、それ自体にcurTest[0].abspathのビルド依存関係を追加しようとすることが表示されます。私のユニット・テスト・システムの場合

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

(あなたとは若干異なっているが、同じ問題を抱えていた:解決策は、あなたが何をしているかを把握することはできませんので、SConsはからのコマンドの実行を「隠す」ことです)これは、依存関係のいずれかが変更されたときはいつでも単体テストを実行し、関連するものが変更されていなければ実行しないという望ましい効果があります。