настройка среды scons - PullRequest
       8

настройка среды scons

1 голос
/ 24 августа 2009

Есть ли способ указать scons использовать определенный файл для настройки среды по умолчанию? Я использую TI DSP, и компилятор отличается от cc; Я хотел бы иметь один «файл среды», который определяет, где находится компилятор и каковы флаги по умолчанию, а затем я смогу использовать его для нескольких проектов.

Есть предложения?

Ответы [ 2 ]

2 голосов
/ 02 сентября 2009

Вы можете использовать обычные утилиты python, чтобы прочитать файл или обработать XML, а затем импортировать его в свою среду. Если у вас нет внешнего файла, который нужно импортировать в SCons, вы можете просто закодировать среду в файле scons. Если по какой-то причине ваша среда определена в словаре Perl (как в моем случае ...), вы можете попытаться использовать PyPerl или преобразовать словарь Perl в YAML и затем прочитайте YAML в python. (Я смог сделать позже, но не первый).

Допустим, у вас просто есть файл, который вам нужно прочитать, который имеет переменные окружения в виде:

ENV_VAR1 ENV_VAL1
ENV_VAR2 ENV_VAL2
...

Вы можете импортировать это в свой файл SConstruct.py как:

import os

env_file =  open('PATH_TO_ENV_FILE','r')

lines = env.file.readlines()

split_regex = re.compile('^(?P<env_var>[\w_]+) *(?P<env_val>.*)')
for line in lines:
    regex_search = split_regex.search(line)
    if regex_search:
        env_var = regex_search.group('env_var')
        env_val = regex_search.group('env_val').strip()
        os.environ[env_var] = env_val

base_env = Environment(ENV=os.environ)

# even though the below lines seem redundant, it was necessary in my build 
# flow...
for key in os.environ.iterkeys():
    base_env[key] = os.environ[key]

Если вы хотите вставить это уродство в другой файл, а затем импортировать его из основного файла SConstruct.py, вы можете добавить следующее, чтобы разрешить доступ к классу «Environment» из вашего другого файла:

from SCons.Environment import *

Затем в ваш основной файл SConstruct.py импортируйте файл env, например:

from env_loader import *
0 голосов
/ 12 декабря 2009
SInclusion file:
...
myenv = Environment(...)
...

SConstruct file:
...
execfile('SInclusion')
...
myenv.Object(...)
...
...