2009-08-24 118 views
1

有沒有辦法告訴scons使用特定文件來設置默認環境?我正在使用TI DSP,編譯器與cc不同;我希望有一個「環境文件」來定義編譯器的位置,以及默認標誌是什麼,然後可以將它用於多個項目。scons環境設置

有什麼建議嗎?

回答

2

您可以使用普通的Python實用程序來讀取文件或處理XML,然後將其導入到您的env中。如果你沒有需要導入到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 * 
+0

感謝 - 這可能是小童的東西,但我不知道Python和不想爲了做一件事而浪費了很多時間。 – 2009-09-03 00:14:21

+0

嗯,所有的鬆散結束都沒有被捆綁起來,但它看起來像它讓我在那裏的大部分方式 – 2010-05-17 17:12:54

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

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

嗯....也許,但它看起來像execfile有一個問題w /版本的Python http :?//scons.tigris.org/ds/viewMessage.do dsForumId = 1268&dsMessageId = 1253990 – 2010-05-17 15:20:47