Иерархические сборки Scons с каталогом репозитория - PullRequest
0 голосов
/ 28 октября 2010

У меня есть проект SCons, настроенный следующим образом:

proj/
    SConstruct
    src/
        c/
        h/
    app1/SConscript
    app2/SConscript
    ...

Все исходные / заголовочные файлы для каждого приложения находятся в src / c и src / h.


  1. На первом шаге я создал SConstruct в app1, который использует функцию репозитория.

...

src = Split ("main.c first.c second.c")

env = Среда (CC = 'g ++', CCFLAGS = ['- O0', '-ggdb'], CPPPATH = ['.'])

env.Program ('appone', src)

Репозиторий ("../ src / c", "../src/h")

Все отлично работает. scons нашел все необходимые исходные / заголовочные файлы из репозитория для сборки приложения appone .


Но если я попытаюсь построить appone иерархически, это не сработает: - (

Я переименовал app1 / SConstruct в app1 / SConscript и поставил

SConscript ('app1 / SConscript')

в проект / SConstruct

Теперь я получаю следующую ошибку:

scons: *** [app1/main.o] Source `app1/main.c' not found, needed by target `app1/main.o'.

Как мне настроить мой proj / SConstruct или proj / app1 / SConscript для поиска всех исходных файлов в моем каталоге репозитория?

1 Ответ

0 голосов
/ 28 октября 2010

SCons ищет ваши исходные файлы в каталоге app1 . Если вы укажете источники как это:

src=Split("#main.c #first.c #second.c")

тогда scons будет искать в репозиториях исходные файлы.

Пара лишних мыслей:

  1. Вы можете хотеть, чтобы main.c находился в каталоге app1, чтобы избежать конфликтов с main.c для других исполняемых файлов. В этом случае удалите # из main.c в вашем списке источников.

  2. Вероятно, будет хорошей идеей определить репозитории в вашей SConstruct верхнего уровня, если несколько приложений совместно используют репозитории.

  3. Часто полезно создавать библиотеки из общих источников, чтобы модульные тесты могли иметь свои собственные основные функции, но связывать те же источники, что и ваши приложения (или чтобы приложения могли совместно использовать общие модули). Это может быть проще сделать, поместив SConscripts в каталог общего репозитория для создания общих библиотек. За рамками этого вопроса, но что-то стоит учитывать по мере роста вашего проекта.

...