Создание внешних деревьев кода с помощью SCons - PullRequest
3 голосов
/ 07 апреля 2010

Я пытаюсь использовать SCons для создания части программного обеспечения, которая зависит от библиотеки, которая доступна в источниках, установленных в системе. Например, в /usr/share/somewhere/src. *.cpp в этом каталоге должен быть встроен в статическую библиотеку и связан с моим собственным кодом. Библиотечные источники не имеют SConscript среди них.

Поскольку библиотека находится в системном каталоге, у меня нет прав и я не хочу помещать артефакты сборки где-то в /usr. /tmp или .build в текущем рабочем каталоге в порядке. Я подозреваю, что это можно сделать легко, но я запутался во всех этих SConscripts и VariantDirs.

env = Environment()
my_things = env.SConscript('src/SConsctipt', variant_dir='.build/my_things')
sys_lib = env.SConscript(????)
result = env.Program('result', [my_things, sys_lib])

Каким образом предполагается решить проблему с SCons?

1 Ответ

3 голосов
/ 07 апреля 2010

Вы можете использовать Репозиторий для этого. Например, в вашей SConstruct вы можете написать:

sys_lib = env.SConscript("external.scons", variant_dir=".build/external")

Затем в файле external.scons (который находится в вашем дереве исходных текстов) вы добавляете путь к внешнему дереву исходных текстов и порядок создания библиотеки в нем.

env = Environment()
env.Repository("/usr/share/somewhere/src")
lib = env.Library("library_name", Glob("*.cpp"))
Return("lib")
...