有没有办法让scons使用特定文件来设置默认环境?我正在使用TI DSP,编译器与cc不同;我想要一个“环境文件”来定义编译器的位置,以及默认标志是什么,然后能够将它用于多个项目。
有什么建议吗?
答案 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(...)
...