1

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

有什么建议么?

4

2 回答 2

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 文件中导入它,你可以添加以下内容以允许从你的另一个文件访问“环境”类:

from SCons.Environment import *

然后在您的主 SConstruct.py 文件中,导入 env 文件,如:

from env_loader import *
于 2009-09-02T16:47:28.097 回答
0
SInclusion file:
...
myenv = Environment(...)
...

SConstruct file:
...
execfile('SInclusion')
...
myenv.Object(...)
...
于 2009-12-11T21:18:45.407 回答