2010-02-16 9 views
1

dans dirA/SConscript Je:scons réglage CXXFLAGS dans un module affecte un autre

Import('env') 
probeenv = env.Clone() 
probeenv['CXXFLAGS'] += ['-fno-rtti','-Wnon-virtual-dtor'] 
... stuff that uses probeenv 

dans DGDIR/SConscript Je

Import('env') 
sipenv = env.Clone() 
... stuff that uses sipenv 

Maintenant, c fichiers ++ dans DGDIR qui se compile, obtient les CXXFLAGS de dirA - comment ça se fait? Cela ne se produit pas avec CCFLAGS. Cela ne veut pas se produire si j'utilise probeenv['CXXFLAGS'] = ['-fno-rtti','-Wnon-virtual-dtor'] dans dirA

+0

quelle version de scons utilisez-vous? Bien que j'ai vu des choses comme ça dans les anciennes versions de Scons, les versions plus récentes ont une bien meilleure isolation entre les environnements. –

Répondre

1

Cela semble être un bug de scons si CXXFLAGS n'est pas défini dans "principal" SConstruct. La solution de contournement consiste simplement à la définir dans une liste vide.

SConscript:

env['CXXFLAGS'] = [] 
1

Il est dédié méthode pour ajouter des données à différents drapeaux du compilateur:

probenv.Append(CXXFLAGS = ['-fno-rtti','-Wnon-virtual-dtor']) 

Il y a aussi AppendUnique et AppendENVPath. Voir l'homme pour la description.

0

La meilleure façon d'y parvenir est:

env.Prepend(CXXFLAGS = ['-fno-rtti', '-Wnon-virtual-dtor']) 

Comme ça, vous ne recevez pas une erreur et vous évitez une solution de contournement, car si la valeur est CXXFLAGS non défini, il est créé automatiquement.