有没有办法告诉 scons 使用特定文件来设置默认环境?我正在使用 TI DSP,编译器与 cc 不同;我想要一个“环境文件”来定义编译器的位置以及默认标志是什么,然后能够将其用于多个项目。
有什么建议么?
有没有办法告诉 scons 使用特定文件来设置默认环境?我正在使用 TI DSP,编译器与 cc 不同;我想要一个“环境文件”来定义编译器的位置以及默认标志是什么,然后能够将其用于多个项目。
有什么建议么?
您可以使用普通的 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 文件中导入它,你可以添加以下内容以允许从你的另一个文件访问“环境”类:
from SCons.Environment import *
然后在您的主 SConstruct.py 文件中,导入 env 文件,如:
from env_loader import *
SInclusion file:
...
myenv = Environment(...)
...
SConstruct file:
...
execfile('SInclusion')
...
myenv.Object(...)
...