SCons スクリプトで、他の環境を派生させたベース環境を作成します。このようなもの :
base = Environment()
base['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
opt = base.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
このようにして、ベース環境からさらに環境 (リリース/デバッグ/インストルメント化/pgo) を作成できます。SCons のドキュメントでは、env.Clone() は env のディープ コピーを行うと言われています。しかし、実際にはうまくいかないようです。この例では、基本環境に -DNDEBUG および -O3 フラグが適用されるためです。
AIが何か悪いことをしている?
編集:これが実際のコードです。このコードには 2 つの print ステートメントがあり、同じものを出力する必要があると思いますが、そうではありません。出力は次のとおりです。
# -*- 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 で修正予定