В скрипте SCons я создаю базовую среду, из которой я получил другие среды. Примерно так:
base = Environment()
base['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
opt = base.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
Таким образом, я могу создать больше среды (release / debug / instrumented / pgo) из базовой среды. В документации SCons сказано, что env.Clone () делает глубокую копию env. Но на самом деле это не похоже на работу. потому что в этом примере к базовой среде применяются флаги -DNDEBUG и -O3.
А я что-то не так делаю?
edit: вот реальный код. В этом коде есть два оператора печати, и я думаю, что они должны печатать одно и то же, но это не так. Вывод следующий:
# -*- 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']
Выход:
|| 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.
Редактировать 2 :
Это ошибка с SCons http://scons.tigris.org/issues/show_bug.cgi?id=2390
Редактировать 3 :
Будет исправлено в 1.3.1 и 2.0.1