Файл конфигурации SCons и значения по умолчанию - PullRequest
5 голосов
/ 16 сентября 2010

У меня есть проект, который я строю с использованием SCons (и MinGW / gcc в зависимости от платформы). Этот проект зависит от нескольких других библиотек (назовем их libfoo и libbar), которые могут быть установлены в разных местах для разных пользователей.

В настоящее время мой файл SConstruct содержит жестко заданный путь к этим библиотекам (скажем, что-то вроде: C:\libfoo).

Теперь я хотел бы добавить параметр конфигурации в мой файл SConstruct, чтобы пользователь, установивший libfoo в другом месте (скажем, C:\custom_path\libfoo), мог сделать что-то вроде:

> scons --configure --libfoo-prefix=C:\custom_path\libfoo

Или:

> scons --configure
scons: Reading SConscript files ...
scons: done reading SConscript files.
### Environment configuration ###
Please enter location of 'libfoo' ("C:\libfoo"): C:\custom_path\libfoo
Please enter location of 'libbar' ("C:\libfoo"): C:\custom_path\libbar
### Configuration over ###

После выбора эти параметры конфигурации должны быть записаны в некоторый файл и перечитываться автоматически каждый раз при запуске scons.

Предоставляет ли scons такой механизм? Как бы я достиг такого поведения? Я точно не осваиваю Python, поэтому приветствуются даже очевидные (но полные) решения.

Спасибо.

1 Ответ

5 голосов
/ 16 сентября 2010

SCons имеет функцию под названием " Переменные ".Вы можете настроить его так, чтобы он довольно легко считывал переменные аргументов командной строки.Так что в вашем случае вы должны сделать что-то подобное из командной строки:

scons LIBFOO=C:\custom_path\libfoo

... и переменная будет запомнена между запусками.Поэтому в следующий раз, когда вы просто запустите scons, и он использует предыдущее значение LIBFOO.

В коде вы используете его так:

# read variables from the cache, a user's custom.py file or command line
# arguments
var = Variables(['variables.cache', 'custom.py'], ARGUMENTS)
# add a path variable
var.AddVariables(PathVariable('LIBFOO',
        'where the foo library is installed',
        r'C:\default\libfoo', PathVariable.PathIsDir))

env = Environment(variables=var)
env.Program('test', 'main.c', LIBPATH='$LIBFOO')

# save variables to a file
var.Save('variables.cache', env)

Если вы действительно хотите использовать "-"параметры стиля, то вы могли бы объединить вышеупомянутое с функцией AddOption, но это более сложно.

Этот вопрос SO говорит о проблемах, связанных с получением значений из объекта Variablesне пропуская их через окружающую среду.

...