Настоящие иерархические сборки с SCons?

Итак, я прочитал вопросы об иерархических сборках, такие как: Создание иерархической сборки с помощью 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/.

Во втором репозитории есть приложение bar, зависящее от libfoo. Его также можно клонировать отдельно, и если libfoo установлен в системе сборки, его можно собрать с помощью scons.

Что я хочу сделать, так это создать новый репозиторий (project_root), в котором репозитории libfoo и bar app установлены как вложенные репозитории с использованием mercurial. Поэтому, когда вы клонируете этот новый репозиторий, он автоматически вытаскивает приложение панели и его зависимость, libfoo. Затем я хочу иметь возможность запускать scons в корне этого нового репозитория и выполнять scons в корневом каталоге libfoo_subrepo/ для сборки libfoo и его модульных тестов. Затем я хочу, чтобы он запускал scons в корневом каталоге barapp_subrepo/ для сборки панели и сообщал ему о ссылке на статическую библиотеку libfoo в libfoo_subrepo/src/.Наконец, я хочу, чтобы он создал несколько новых модульных тестов в тестах /, которые используют как статическую библиотеку libfoo, так и исходные файлы из приложения панели для тестирования приложения панели и libfoo при объединении вместе.

Насколько я могу судить из документации по scons, мне нужно будет создать собственный Builder для «подрепозитория», который будет запускать 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. Я не хочу возвращаться, чтобы сделать.

Спасибо.

11
задан Community 23 May 2017 в 12:13
поделиться