In uno script SCons creo un ambiente di base da cui ho derivato altri ambienti. Qualcosa di simile a questo:env.Clone() in scons non esegue una copia profonda
base = Environment()
base['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
opt = base.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
In questo modo, posso creare più rispettosi dell'ambiente (release/debug/strumentata/PGO) dall'ambiente base. Nella documentazione di SCons si dice che env.Clone() esegue una copia profonda di env. Ma in effetti non sembra funzionare. perché nell'esempio, l'ambiente di base avrebbe i flag -DNDEBUG e -O3 applicati.
A Ho fatto qualcosa di sbagliato?
modifica: questo è il codice reale. Ci sono due dichiarazioni di stampa in questo codice e penso che dovrebbero stampare le stesse cose, ma non lo fanno. L'uscita segue:
# -*- 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']
L'output:
|| 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:
Si tratta di un bug con SCons http://scons.tigris.org/issues/show_bug.cgi?id=2390
Modifica 3:
saranno fissati in 1.3.1 e 2.0.1
Ciao, ho trovato un riferimento a questo bug nel tracker di scons issue (http://scons.tigris.org/issues/show_bug.cgi?id=2390). Sembra che gli sviluppatori non siano in grado di riprodurre il bug, quindi lo hanno contrassegnato come RISOLTO. –
Il bug viene riaperto e si spera che venga corretto nelle prossime versioni. –
Sembra che sia stato corretto in 1.3.1. Puoi verificarlo? – bdbaddog