2010-03-17 3 views
5

사용 설명서가 하나의 프로그램의 여러 버전을 구축 구축 Multiple Construction Environments의 사용에 대해 알려줍니다 다음과 같은 예를 주시는 SCons는 :SCons는 : 프로그램의 여러 변종에 동일한 빌더 (릴리즈/디버그)를 사용하는 방법

을/ variant_dir VariantDir()가 더 나은 솔루션 같은 소리

대신 수동으로 다른 환경으로 컴파일 된 개체에 다른 이름을 할당

opt = Environment(CCFLAGS = '-O2') 
dbg = Environment(CCFLAGS = '-g') 

o = opt.Object('foo-opt', 'foo.c') 
opt.Program(o) 

d = dbg.Object('foo-dbg', 'foo.c') 
dbg.Program(d) 
, ...

하지만 난 SConscript 내부의 Program() 빌더를 배치하면 :

Import('env') 
env.Program('foo.c') 

다른 환경을 동일한 SConscript 파일로 내보내려면 어떻게해야합니까?

opt = Environment(CCFLAGS = '-O2') 
dbg = Environment(CCFLAGS = '-g') 

SConscript('SConscript', 'opt', variant_dir='release') #'opt' --> 'env'??? 
SConscript('SConscript', 'dbg', variant_dir='debug') #'dbg' --> 'env'??? 

불행하게도 SCons Wiki의 토론이 주제에 대한 더 많은 통찰력을 가져 오지 않습니다.

입력 해 주셔서 감사합니다. 당신이 할 수 SConscript에서 다음

for dir, env in (('release', opt), ('debug', dbg)): 
    env.SConscript('SConscript', 'env', variant_dir=dir) 

과 : 수출이 SConscript에 arg를 같이

Import('env') 

답변

4

SConscript 환경 자체에 정의 된 방법이다. 키는 SConscript가 가져 오기 위해 사용할 이름이고, 값은 SConstruct의 개체입니다. 그래서 다음 SConscript Import('env')에서 다음

SConscript('SConscript', exports={'env': dbg}, variant_dir='debug') 
SConscript('SConscript', exports={'env': opt}, variant_dir='release') 

dbg 처음과 opt 두 번째 시간을 얻을 것이다. 이것은 env뿐만 아니라 당신이 좋아하는 다른 것을 export/import하기 위해서도 사용됩니다.

자세한 내용은 설명서 페이지의 Export() 및 SConscript()를 참조하십시오.

+0

감사합니다. BennyG : 매우 흥미롭고 파이썬 스럽습니다 .--). 나는 당신의 제안을 시도하기 시작했다. 그러나 지금까지 나는 빌드 스크립트의 다른 변화들에 갇혀있다 ... 나는 나중에 더 많은 피드백을 가지고 돌아갈 것이다! –

+0

나는 variant_dir이 내 SConscript에 가져 오는 측면 중 일부와 여전히 고심하고 있지만 솔루션은 내 질문에 완벽하게 맞습니다. 다시 한 번 감사드립니다! –

2

다른 방법으로, 당신은 사전을 전달할 수 있습니다

+0

이 대안을 지적 해 주신 고마워요. 맨 페이지는 사전 사례에 대한 예제에 드문 드문 있지만 결국이 접근법은 나와 같은 덜 냉증한 사람들에게 더 깨끗해 보입니다. –