Dans un script SCons, je crée un environnement de base à partir duquel j'ai dérivé d'autres environnements. Quelque chose comme ceci:env.Clone() dans scons ne fait pas de copie profonde
base = Environment()
base['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
opt = base.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
De cette façon, je peux créer un environnement plus (release/debug/instrumenté/PGO) de l'environnement de base. Dans la documentation de SCons, il est dit que env.Clone() fait une copie profonde de env. Mais en fait, cela ne semble pas fonctionner. Dans l'exemple, l'environnement de base aurait les indicateurs -DNDEBUG et -O3 appliqués.
A Je fais quelque chose de mal?
edit: Voici le vrai code. Il y a deux instructions d'impression dans ce code et je pense qu'elles devraient imprimer les mêmes choses, mais elles ne le font pas. La sortie suivante:
# -*- coding: utf-8 -*-
import os.path
import glob
local_env = Environment()
local_env['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
local_env.Append(LIBS = ['pthread', 'boost_thread', 'boost_filesystem', 'boost_program_options', 'boost_iostreams'])
opt = local_env.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
print opt['CXXFLAGS']
instr = opt.Clone()
instr['CXXFLAGS'] += ['-fprofile-arcs']
instr['LIBS'] += ['gcov']
print opt['CXXFLAGS']
La sortie:
|| scons: Reading SConscript files ...
|| -DBOOST_HAS_PTHREAD -D__STDC_CONSTANT_MACROS -DFILELOG_MAX_LEVEL=4 -Wall -DNDEBUG -O3
|| -DBOOST_HAS_PTHREAD -D__STDC_CONSTANT_MACROS -DFILELOG_MAX_LEVEL=4 -Wall -DNDEBUG -O3 -fprofile-arcs
|| scons: done reading SConscript files.
|| scons: Building targets ...
|| scons: `.' is up to date.
|| scons: done building targets.
Edit 2:
Il est un bug avec SCons http://scons.tigris.org/issues/show_bug.cgi?id=2390
Modifier 3:
sera fixé en 1.3.1 et 2.0.1
Salut, j'ai trouvé une référence à ce bogue dans le suiveur de problèmes de scons (http://scons.tigris.org/issues/show_bug.cgi?id=2390). Il semble que les développeurs ne sont pas en mesure de reproduire le bug, donc ils l'ont marqué comme RÉSOLU. –
Le bug est rouvert et nous espérons qu'il sera corrigé dans les prochaines versions. –
On dirait que cela a été corrigé dans 1.3.1. Pouvez-vous le vérifier? – bdbaddog