Trong một kịch bản SCons, tôi tạo một môi trường cơ sở mà từ đó tôi bắt nguồn từ các môi trường khác. Một cái gì đó như thế này:env.Clone() trong scons không làm một bản sao sâu
base = Environment()
base['CXXFLAGS'] += ['-DBOOST_HAS_PTHREAD', '-D__STDC_CONSTANT_MACROS', '-DFILELOG_MAX_LEVEL=4', '-Wall']
opt = base.Clone()
opt['CXXFLAGS'] += ['-DNDEBUG', '-O3']
Bằng cách này, tôi có thể tạo thêm môi trường (phát hành/gỡ lỗi/thiết bị/pgo) từ môi trường cơ sở. Trong tài liệu của SCons, env.Clone() thực hiện một bản sao sâu của env. Nhưng trên thực tế nó dường như không hoạt động. bởi vì trong ví dụ này, môi trường cơ sở sẽ có các cờ -DNDEBUG và -O3 được áp dụng.
Tôi có làm gì sai không?
chỉnh sửa: Đây là mã thực. Có hai câu lệnh in trong mã này và tôi nghĩ họ nên in những thứ giống nhau, nhưng họ không in. Kết quả sau:
# -*- 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']
đầu ra:
|| 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.
Sửa 2:
Đó là một lỗi với SCons http://scons.tigris.org/issues/show_bug.cgi?id=2390
Sửa 3:
sẽ được cố định trong 1.3.1 và 2.0.1
Xin chào, tôi đã tìm thấy một tham chiếu đến lỗi này trong trình theo dõi vấn đề về scons (http://scons.tigris.org/issues/show_bug.cgi?id=2390). Dường như những người phát triển không thể tái tạo lỗi, vì vậy họ đánh dấu nó là RESOLVED. –
Lỗi này được mở lại và hy vọng sẽ được sửa trong bản phát hành tiếp theo. –
Có vẻ như điều này đã được sửa trong 1.3.1. Bạn có thể xác minh nó? – bdbaddog