在SCons脚本中,我创建了一个基础环境,我从中导出了其他环境.像这样的东西:
base = Environment()
base['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
opt = base.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
Run Code Online (Sandbox Code Playgroud)
这样,我可以从基础环境创建更多环境(release/debug/instrumented/pgo).在SCons文档中,它说env.Clone()执行env的深层副本.但事实上它似乎没有用.因为在示例中,基本环境将应用-DNDEBUG和-O3标志.
我做错了什么?
编辑:这是真正的代码.这段代码中有两个打印语句,我认为它们应该打印相同的东西,但它们不会.输出如下:
# -*- 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']
Run Code Online (Sandbox Code Playgroud)
输出 :
|| 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.
Run Code Online (Sandbox Code Playgroud)
编辑2:
这是SCons的一个错误http://scons.tigris.org/issues/show_bug.cgi?id=2390
编辑3:
将在1.3.1和2.0.1中修复
假设这是一个 Scons 问题(代码/文档差异),那么添加怎么样
import copy
Run Code Online (Sandbox Code Playgroud)
在脚本的头部,并使用
opt = copy.deepcopy(Base)
Run Code Online (Sandbox Code Playgroud)
即利用 Scons 在 Python 中的事实...?