In einem SCons-Skript erstelle ich eine Basisumgebung, aus der ich andere Umgebungen abgeleitet habe. Etwas wie folgt aus:env.Clone() in scons macht keine Deep-Copy
base = Environment()
base['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
opt = base.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
Auf diese Weise kann ich mehr Umgebung (Release/debug/instrumentiert/PGO) von der Basisumgebung. In der SCons Dokumentation heißt es, dass env.Clone() eine tiefe Kopie von env macht. Aber tatsächlich scheint es nicht zu funktionieren. Da im Beispiel die Basisumgebung die Flags -DNDEBUG und -O3 haben würde.
A Ich mache etwas falsch?
edit: Hier ist der echte Code. Es gibt zwei Druckanweisungen in diesem Code und ich denke, sie sollten die gleichen Dinge drucken, aber sie nicht. Der Ausgang folgt:
# -*- 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']
Der Ausgang:
|| 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:
Es ist ein Fehler mit SCons http://scons.tigris.org/issues/show_bug.cgi?id=2390
bearbeiten 3:
Wird in 1.3.1 und 2.0.1
Hallo, ich habe einen Verweis auf diesen Fehler im Scons Issue Tracker gefunden (http://scons.tigris.org/issues/show_bug.cgi?id=2390). Es scheint, dass die Entwickler nicht in der Lage sind, den Fehler zu reproduzieren, also markierten sie ihn als BEHOBEN. –
Der Bug wurde wieder geöffnet und wird hoffentlich in den nächsten Releases behoben sein. –
Sieht so aus als wäre das in 1.3.1 behoben worden. Kannst du es verifizieren? – bdbaddog