Scons AddPostAction вызывает обход ошибок проверки зависимостей - PullRequest
5 голосов
/ 22 ноября 2011

В 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 )

1 Ответ

5 голосов
/ 06 января 2012

Я нашел решение этой проблемы. Используя:

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

похоже, что SCons пытается быть умным и добавлять зависимость сборки для curTest[0].abspath к себе, вызывая эту проблему циклической зависимости. Решение состоит в том, чтобы «скрыть» выполнение команды от SCons, чтобы она не могла понять, что вы делаете:

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

Для моей системы модульного тестирования (которая немного отличается от вашей, но имела ту же проблему) это дает желаемый эффект запуска модульного теста всякий раз, когда изменяется любая из его зависимостей, и не запускает его, если ничего не изменилось.

...