在 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 标志。
人工智能做错了什么?
编辑:这是真正的代码。此代码中有两个打印语句,我认为它们应该打印相同的内容,但事实并非如此。输出如下:
# -*- 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 中修复