2010-01-06 1 views
6

쉬운 질문이지만 대답을 모르겠습니다.scons : 하나의 파일에 대한 빌드 옵션 덮어 쓰기

내가 scons 빌드를 가지고 있다고 가정하면 CCFLAGS-O1이 포함됩니다. 하나의 파일이 needsOptimization.cpp이고 -O1-O2으로 대체하고 싶습니다. 내가 어떻게 scons에서 이것을 할 수 있을까?


갱신 : 내 SConscript 파일에

: 이것이 내가 bialix의 답변에 따라 일을 결국 무엇을 이전

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)); 
    ... 

이 파일이었다

Import('env'); 

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

답변

9

컴파일에 대한 세분화 된 제어를 위해 Object() 빌더를 사용하십시오. 그런 다음이 오브젝트들을 Program() 빌더에 전달하십시오.

예. 대신 : 당신이 CCFLAGS =를 제공하는 경우

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) 

당신은 ENV 변수의 개별 클론의 생성을 방지 할 수 있습니다 '- O2'권리 개체() 호출 :

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

당신은 다음을 사용합니다 : 이 같은 것을 필요 : 별도의 ENV 변수의 작성을 방지

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

은 (bialix's answer 심판)가 필요합니다. 당신은 단지 다음이 (또는이 bialix 같은 루프 수행에)

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

을 할 경우

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

당신은 모든 내장 플래그를 잃게됩니다.