W skrypcie SCons tworzę podstawowe środowisko, z którego wyprowadziłem inne środowiska. Coś takiego:env.Clone() w scons nie wykonuje kopii głębokiej
base = Environment()
base['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
opt = base.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
W ten sposób można utworzyć więcej środowisko (release/debug/oprzyrządowanie/PGO) od środowisku zasadowym. W dokumentacji SCons mówi się, że env.Clone() robi głęboką kopię env. Ale w rzeczywistości to nie działa. ponieważ w tym przykładzie środowisko podstawowe będzie miało zastosowane flagi -DNDEBUG i -O3.
A Robię coś nie tak?
edytuj: Oto prawdziwy kod. W tym kodzie są dwie instrukcje drukowania i myślę, że powinny wydrukować te same rzeczy, ale tak nie jest. Wyjście następująco:
# -*- 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']
wyjście:
|| 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.
Edycja 2:
Jest to błąd z SCons http://scons.tigris.org/issues/show_bug.cgi?id=2390
Edycja 3:
zostanie ustalona w 1.3.1 i 2.0.1
Witam, znalazłem odnośnik do tego błędu w trackerze problemów scons (http://scons.tigris.org/issues/show_bug.cgi?id=2390). Wygląda na to, że programatory nie są w stanie odtworzyć błędu, więc oznaczono go jako ROZDZIELONY. –
Błąd został ponownie otwarty i mamy nadzieję, że zostanie naprawiony w następnych wydaniach. –
Wygląda na to, że zostało to naprawione w wersji 1.3.1. Czy możesz to zweryfikować? – bdbaddog