2015-02-18 3 views
0

Я пытаюсь автоматизировать рабочий процесс со SCons, где несколько сценариев полагаются на файл проекта, который, в свою очередь, ссылается на несколько исходных файлов. Только сценарии имеют реальное действие по строительству, в проекте нет ничего общего; он просто содержит имена файлов.Зависит от целевой цели

Чтобы уменьшить избыточность, я хотел бы извлечь имя файла проекта из файлов сценариев и извлечь имена исходных файлов из файла проекта. Я использую пользовательский Scanner() для этого, которое хорошо работает и дает мне --tree=status зависимость, как я представляю их, т.е.

[E B C ]+-output.log 
[E  ] +-script.tcl 
[E  ] +-project.prj 
[E  C ]  +-source1 
[E  C ]  +-source2 
      (and so on for other scripts) 

Однако, если я касаюсь исходного файла, никаких действий сборки не срабатывают. Я играл с Depends(), SideEffect() и другими, но я, кажется, неправильно понимаю что-то здесь. Только обходные я могу думать прямо сейчас

  • есть пользовательский конструктор для моего проекта, который будет просто выводить фиктивный файл, и есть сценарии зависят от того, как «источник»,
  • помошью двух Сканеры (для сценариев и проектов) в один, чтобы исключить дополнительный уровень.

Есть ли другой способ правильно моделировать это с помощью SCons?

ответ

1

Что вы ищете, является обычным излучателем для вашего Builder «prj-> tcl». Посмотрите на пример http://scons.org/wiki/ToolsForFools. Вероятно, вы захотите сохранить список «целей» нетронутыми, но раскройте «источники» на основе результатов вашего процесса сканирования. И да, вы должны сканировать в Emitter ... Сканер будет подходящим местом для неявных зависимостей, таких как заголовки C/C++, которые работают с границами файлов/папок.