( это было слишком долго для комментария, не уверен, что это «ответ» ... )
SConstructs - уникальные вещи верхнего уровня, но, опять же, они также не являются 't - вы можете вызвать любой файл, когда вы вызываете SConscript()
, включая файл с именем subdir/SConstruct
, если последний структурирован таким образом, что имеет смысл, и имеет A Export()
вещи, которые проектируют, что вызвали его были бы заинтересованы в Import()
ing.
Там также ничего не мешает вам написать действительно минимальную SConstruct для A, которая выполняет только вещи, которые могут быть уникальными для создания автономного A, и все реальная (обычная) работа выполняется SConscript, который вызывает SConstruct A, но который также может вызывать SConstruct B.
Или вы можете добавить шаг к A, который записывает всю информацию о переменных, которая, по вашему мнению, нужна проекту B. в файл, скажем, exports.py
в форме операторов присваивания, и пусть B прочитает это с помощью вызова Variables(files="exports.py")
- это немного похоже на выполнение Export
и Import
, но через границу вызовов scons. Если файл не существует, предположим, что вам нужно вызвать scons для запуска сборки A, поэтому файл служит точкой синхронизации c для двух независимых сборок.
Возможно, вы также сможете сделайте что-нибудь с функцией ParseConfig
, если вы напишете сценарий для вызова, который преобразует информацию из A в форму, которую может потреблять B.
Все это подразумевает некоторые изменения в A сборка, однако. Они должны быть безвредными с точки зрения A: запись файла или экспорт некоторых переменных - это одноразовая операция, если только кто-то не подслушивает их - при условии, что сборка A достаточно чиста.
случай) может быть применимо? https://github.com/SCons/scons/wiki/SconstructMultiple