scons环境设置

时间:2009-08-24 16:17:00

标签: scons

有没有办法让scons使用特定文件来设置默认环境?我正在使用TI DSP,编译器与cc不同;我想要一个“环境文件”来定义编译器的位置,以及默认标志是什么,然后能够将它用于多个项目。

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

您可以使用普通的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 *

答案 1 :(得分:0)

SInclusion file:
...
myenv = Environment(...)
...

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