2010-01-06 27 views
6

Câu hỏi dễ dàng nhưng tôi không biết câu trả lời.scons: ghi đè tùy chọn xây dựng cho một tệp

Giả sử tôi có một tòa nhà scons nơi CCFLAGS của tôi bao gồm -O1. Tôi có một tệp needsOptimization.cpp nơi tôi muốn ghi đè số -O1 với số -O2 thay thế. Làm thế nào tôi có thể làm điều này trong scons?


cập nhật: đây là những gì tôi đã kết thúc làm dựa trên câu trả lời bialix của:

trong tập tin SConscript tôi:

Import('env'); 

env2 = env.Clone(); 
env2.Append(CCFLAGS=Split('-O2 --asm_listing')); 

sourceFiles = ['main.cpp','pwm3phase.cpp']; 
sourceFiles2 = ['serialencoder.cpp','uartTestObject.cpp']; 
objectFiles = []; 
objectFiles.append(env.Object(sourceFiles)); 
objectFiles.append(env2.Object(sourceFiles2)); 
    ... 

trước tập tin này là:

Import('env'); 

sourceFiles = ['main.cpp','pwm3phase.cpp','serialencoder.cpp','uartTestObject.cpp']; 
objectFiles = env.Object(sourceFiles); 
    ... 

Trả lời

9

Sử dụng trình tạo Object() để kiểm soát chi tiết việc biên dịch, một d sau đó chuyển các đối tượng này vào chương trình Program().

Ví dụ: thay vì:

env = Environment() 
env.Program(target='foo', source=['foo.cpp', 'bar.cpp', 'needsOptimisation.cpp']) 

Bạn cần phải sử dụng sau đây:

env = Environment() 
env_o1 = env.Clone() 
env_o1.Append(CCFLAGS = '-O1') 

env_o2 = env.Clone() 
env_o2.Append(CCFLAGS = '-O2') 

# extend these lists if needed 
SRC_O1 = ['foo.cpp', 'bar.cpp'] 
SRC_O2 = ['needsOptimisation.cpp'] 

obj_o1 = [env_o1.Object(i) for i in SRC_O1] 
obj_o2 = [env_o2.Object(i) for i in SRC_O2] 

env.Program(target='foo', source=obj_o1+obj_o2) 

Bạn có thể tránh tạo ra các bản sao riêng của biến env nếu bạn cung cấp CCFLAGS = '- O2' ngay trong Object() gọi:

obj_o2 = [env.Object(i, CCFLAGS=env['CCFLAGS'] + ['-O2']) for i in SRC_O2] 
6

Tránh tạo biến env riêng yêu cầu (ref: bialix's answer) cần như thế này.

obj_o2 = env.Object(SRC_O2, CCFLAGS=env['CCFLAGS'] + ['-O2']); 

Nếu bạn chỉ làm điều này (hoặc trong vòng lặp for như bialix không)

obj_o2 = env.Object(SRC_O2, CCFLAGS='-O2'); 

sau đó bạn mất tất cả những lá cờ dựng sẵn.

Các vấn đề liên quan