特定のファイルを使用してデフォルト環境をセットアップするように scons に指示する方法はありますか? 私は TI の DSP を使用していますが、コンパイラは cc とは別のものです。コンパイラの場所とデフォルトのフラグを定義する「環境ファイル」を 1 つ作成し、これを複数のプロジェクトで使用できるようにしたいと考えています。
助言がありますか?
特定のファイルを使用してデフォルト環境をセットアップするように scons に指示する方法はありますか? 私は TI の DSP を使用していますが、コンパイラは cc とは別のものです。コンパイラの場所とデフォルトのフラグを定義する「環境ファイル」を 1 つ作成し、これを複数のプロジェクトで使用できるようにしたいと考えています。
助言がありますか?
通常の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 *
SInclusion file:
...
myenv = Environment(...)
...
SConstruct file:
...
execfile('SInclusion')
...
myenv.Object(...)
...