Итак, я прочитал здесь вопросы о иерархических построениях, например: Создание иерархической сборки со сканами
Я хочу сделать реальное иерархическое построение двух автономных репозиториев, в которых используются как схоты, созданные мной как субрепозиции с использованием меркуриальных. Ниже приведен макет файла, который иллюстрирует, что я хочу сделать.
Желаемая компоновка:
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/и создает исполняемый файл unit test в тесте /, который ссылается на статическую библиотеку в src/.
Второе репо имеет приложение для бара, которое зависит от libfoo. Он также может быть клонирован автономно, и если libfoo установлен в системе сборки, его можно создать с помощью scons.
Что я хочу сделать, настроено новое репо (project_root), в котором оба репозитория libfoo и bar app устанавливаются как subrepos с использованием mercurial. Поэтому, когда вы клонируете это новое репо, оно автоматически отключает приложение bar и его зависимость libfoo. Затем я хочу иметь возможность запускать scons в корне этого нового репо и выполнить его в libfoo_subrepo/root для создания libfoo и его модульных тестов. Затем я хочу, чтобы он запускал scons в barapp_subrepo/root для создания бара и сообщал, что он ссылается на статическую библиотеку libfoo в libfoo_subrepo/src/. Наконец, я хочу, чтобы он создавал несколько новых модульных тестов в тестах /, которые используют как статическую библиотеку libfoo, так и исходные файлы из приложения 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. Скажите, что есть способ сделать то, что я хочу, с помощью scons. Я не хочу возвращаться, чтобы сделать.
Спасибо.