Итак, я прочитал здесь вопросы об иерархических сборках, например: Создание иерархической сборки с помощью SCons
Я хочу провести реальное иерархическое построение двух автономных репозиториев, в обоих из которых используются sconsчто я настроил как суб-репо, используя Mercurial.Ниже приведен макет файла, который иллюстрирует, что я хочу сделать.
Желаемый макет:
project_root/ (new project that builds bar app using the libfoo built from source)
libfoo_subrepo/ (standalone project repo from bitbucket)
src/
SConscript
libfoo.c
libfoo.h
test/
SConscript
test_foo.c
SConstruct
barapp_subrepo/ (standalone project repo from bitbucket that uses libfoo)
src/
SConscript
bar.c
bar.h
test/
SConscript
test_bar.c
SConstruct
test/
SConscript
test_bar_with_foo.c
SConstruct
Итак, у меня есть два отдельных репозитория, оба с использованием scons.Первый, libfoo, может быть клонирован автономно и собран с использованием scons.При запуске scons в корневом каталоге libfoo он создает статическую библиотеку libfoo в src / и создает исполняемый файл модульного теста в test /, который связывается со статической библиотекой в src /.
Во втором репо есть панельприложение, которое зависит от libfoo.Он также может быть клонирован автономно, и если libfoo установлен в системе сборки, он может быть собран с использованием scons.
Что я хочу сделать, так это создать новое хранилище (project_root), в котором есть как libfoo, так иБар-репозитории приложений, заданные в качестве подпунктов с использованием Mercurial.Поэтому, когда вы клонируете этот новый репозиторий, он автоматически отключает приложение-бар и его зависимость, libfoo.Затем я хочу иметь возможность запускать scons в корне этого нового репозитория и иметь возможность запускать scons в libfoo_subrepo / root для сборки libfoo и его модульных тестов.Затем я хочу, чтобы он запускал scons в barapp_subrepo / root, чтобы построить панель, и велел ей связываться со статической библиотекой libfoo в libfoo_subrepo / src /.Наконец, я хочу, чтобы он создал несколько новых модульных тестов в тестах, которые используют статическую библиотеку libfoo и исходные файлы из приложения bar для тестирования приложения bar и libfoo при их объединении.
Насколько я могу судитьИз прочтения документации scons мне нужно создать собственный Builder для «subrepo», который будет запускать scons в под-оболочке.Затем я мог бы добавить libfoo.subrepo и barapp.subrepo в каталог project_root / и кое-как настроить его так, чтобы, когда сборщик переходит к выполнению команды для сборки libfoo.subrepo, он преобразовывал имя источника в путь, в котором он выполняет scons в.
building 'libfoo.subrepo' translates into executing 'cd libfoo_subrepo; scons'
Мне кажется, что scons не может рекурсивно создавать отдельные проекты scons.Все, что я прочитал, предполагает, что у вас есть возможность создавать файлы SConscript в подпапках, а затем корневой файл SConstruct зависит от файлов SConscript.Пожалуйста, скажите мне, что есть способ делать то, что я хочу с помощью сыновей.Я не хочу возвращаться, чтобы сделать.
Спасибо.