2009-08-24 8 views
1

Existe-t-il un moyen d'indiquer à un utilisateur d'utiliser un fichier particulier pour configurer l'environnement par défaut? J'utilise TI DSP et le compilateur est quelque chose de différent de cc; Je voudrais avoir un "fichier d'environnement" qui définit où le compilateur est, et quels sont les indicateurs par défaut, et ensuite être en mesure d'utiliser cela pour plusieurs projets.Configuration de l'environnement scons

Des suggestions?

Répondre

2

Vous pouvez utiliser les utilitaires python normaux pour lire un fichier ou traiter un fichier XML, puis l'importer dans votre environnement. Si vous n'avez pas de fichier externe à importer dans SCons, vous pouvez simplement encoder l'environnement dans le fichier scons. Si, pour une raison quelconque, votre environnement est défini dans un dictionnaire Perl (comme dans mon cas ...), vous pouvez essayer d'utiliser PyPerl ou convertir le dictionnaire Perl en YAML puis lire le YAML en python. (J'étais capable de faire le plus tard, mais pas le premier).

Disons que vous avez simplement un fichier que vous avez besoin de lire ce qui a des variables d'environnement sous la forme:

ENV_VAR1 ENV_VAL1 
ENV_VAR2 ENV_VAL2 
... 

Vous pouvez importer dans votre fichier SConstruct.py comme:

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] 

Si vous voulez coller cette laideur dans un fichier différent et l'importer de votre fichier SConstruct.py principal, vous pouvez ajouter ce qui suit pour activer l'accès à la classe 'Environment' de votre autre fichier:

from SCons.Environment import * 

ensuite dans votre fichier principal SConstruct.py, importer le fichier env comme:

from env_loader import * 
+0

merci - c'est probablement des choses kiddie, mais je ne sais pas Python et ne veulent pas perdre beaucoup de temps à lutter à travers elle juste pour faire une chose. –

+0

hmmm, toutes les extrémités libres n'ont pas été attachées pour moi, mais il semble que cela m'obtient la plupart du temps –

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

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

hmmm .... peut-être, mais il semble que execfile a un problème w/versions de http Python : //scons.tigris.org/ds/viewMessage.do? dsForumId = 1268 & dsMessageId = 1253990 –

Questions connexes