2011-09-20 5 views
5

Me gustaría establecer el compilador define a -DBLUB, así como -DFOO = 1.Crear CPPDEFINES mixto (conjunto de valores) en SCons

Actualmente sólo tengo:

env.Append("CPPDEFINES", ["BLUB", "VALUE2"]) 

Ahora me gustaría incluir un tercer definen a través de "FOO": 1 y por lo tanto utilizar CPPDEFINES como un diccionario para que pueda más tarde en la prueba bastante fácil

env["CPPDEFINES"].get("FOO") == 1 

o tan. Todo lo que intenté genera errores de sintaxis o errores extraños. ¿Podría uno explicar las formas extrañas de hacer esto en Python para mí?

Respuesta

4

Si necesita especificar un valor para cualquier definición única, CPPDEFINES debe ser un diccionario.

Desde el scons User Manual:

Si $ CPPDEFINES es un diccionario, los valores de la CPPDEFPREFIX $ y $ CPPDEFSUFFIX variables de construcción se añadirá al principio y al final de cada artículo del diccionario. La clave de cada elemento del diccionario es un nombre que se define con el valor correspondiente del elemento del diccionario; si el valor es Ninguno, entonces el nombre se define sin un valor explícito.

Para su ejemplo, sugiero:

env.Append(CPPDEFINES = { 'BLUB': None, 'VALUE2': None, 'Foo': 1 }) 

o

env.Append(CPPDEFINES = { 'BLUB': None, 'VALUE2': None }) 
...and sometime later... 
env.Append(CPPDEFINES = { 'Foo': 1 }) 
+0

Usted __CANNOT__ uso env.Append * * en un nuevo Medio Ambiente desde CPPDEFINES * * se inicializa como una lista y anexar simplemente agrega el diccionario como un elemento de lista. Para que esto funcione, debe usar * env ["CPPDEFINES"] = {'Foo': 1} * para que se reemplace el tipo/variable actual * CPPDEFINES *. – abergmeier

+0

@LCIDFire 'CPPDEFINES' no se inicializó como una lista para mí en un nuevo entorno en scons 2.0.1. Cuando creo un nuevo entorno, puedo usar el código que escribí arriba. Tiene razón al señalar que si 'CPPDEFINES' ya es una lista, obtendrá errores, por lo tanto, la primera línea de mi respuesta :) –

+0

Para la lista, puede manejarlo con:' env.Append (CPPDEFINES = ['BLUB', 'VALUE2', ('Foo', '1')]) '. Te dará como resultado '-DBLUB -DVALUE2 -DFoo = 1' Debes agregarlo en tu respuesta. – Phong