2011-09-20 9 views
5

mi piacerebbe impostare il compilatore definisce per -DBLUB così come -DFOO = 1.Crea misto (valore impostato) CPPDEFINES in SCons

Attualmente ho solo:

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

ora vorrebbe includere un terzo definiscono tramite "FOO": 1 e quindi utilizzare CPPDEFINES come un dizionario in modo che posso in seguito prova abbastanza facile

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

o così. Tutto ciò che ho tentato porta a errori di sintassi o strani errori. Qualcuno potrebbe spiegare gli strani modi per farlo in python?

risposta

4

Se è necessario specificare un valore per ogni singola definizione, CPPDEFINES deve essere un dizionario.

Dal scons User Manual:

Se $ CPPDEFINES è un dizionario, i valori del $ CPPDEFPREFIX e $ CPPDEFSUFFIX variabili costruzione verrà aggiunto all'inizio e alla fine di ogni elemento dal dizionario. La chiave di ciascun elemento del dizionario è un nome definito per il valore corrispondente dell'oggetto del dizionario; se il valore è None, il nome viene definito senza un valore esplicito.

Per esempio, suggerisco:

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

È __CANNOT__ uso * * env.Append su un nuovo ambiente in quanto CPPDEFINES * * viene inizializzato come una lista e aggiungere aggiunge semplicemente il dizionario come elemento della lista. Perché funzioni, devi usare * env ["CPPDEFINES"] = {'Foo': 1} * in modo che il tipo/variabile * CPPDEFINES * venga sostituito. – abergmeier

+0

@LCIDFire 'CPPDEFINES' non è inizializzato come lista per me in un nuovo ambiente in scons 2.0.1. Quando creo un nuovo ambiente, posso usare il codice che ho scritto sopra. Hai ragione nel dire che se 'CPPDEFINES' è già una lista, otterrai degli errori - quindi la prima riga della mia risposta :) –

+0

Per l'elenco, puoi gestirlo con:' env.Append (CPPDEFINES = ['BLUB', 'VALUE2', ('Foo', '1')]) '. Risulterà come '-DBLUB -DVALUE2 -DFoo = 1' Dovresti aggiungerlo alla tua risposta. – Phong