В SConstruct, как вы получаете то, что «scons --tree = all» будет распечатывать? - PullRequest
1 голос
/ 23 ноября 2011

Этот вопрос о стеке потока показывает, как получить список всех зависимостей для одной или нескольких целей.Как вы получаете то же самое из файла SConstruct?

Редактировать: то есть как объект или что-то еще.Вы всегда можете рекурсивно вызвать scons -tree = all и получить стандартный вывод из этого процесса, но я не хочу взломать.Я хотел бы, чтобы доступ к объекту зависимости использовался scons.

Ответы [ 2 ]

1 голос
/ 24 ноября 2011

Лучший способ получить эту информацию - просто посмотреть на источник для SCons.Вы ищете файл SCons / Script / Main.py и, в частности, класс TreePrinter.Основная идея состоит в том, что все узлы SCons содержат в себе все соответствующие детали для восстановления графа зависимостей.

Простейший тестовый пример, о котором я могу подумать:

import os
env = Environment(ENV = os.environ)
app = env.Program('dummy', 'main.cpp')

for item in app:
    for child in item.all_children():
        print child

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

0 голосов
/ 19 декабря 2011

Я не думаю, что это возможно изнутри кода.Код в файле SConstruct - это код, который генерирует дерево.Таким образом, дерево не может быть предоставлено до того, как весь код в файле SConstruct будет выполнен.С другой стороны, я думаю, что будет возможно получить объект, который вы упомянули в Python, если у вас хватит терпения просмотреть код Scons, чтобы увидеть, как они работают с опцией --tree.Но вам придется подождать, пока дерево не будет сгенерировано, прежде чем вы получите к нему доступ.

...