2009-09-16 6 views
2

Scons 파일 자체가 변경되면 scons가 모든 대상을 강제 빌드 할 수있는 방법이 있습니까?scons를 사용하여 전역 종속성으로 파일 구성

(추론 내가 빌드 설정을 변경하면, 나는 새로운 빌드 설정과 일치하도록 이전에 내장 된 파일에 의존 할 수있는) 하나의 종속성으로 SConstruct을 추가해야하는 경우

답변

3

귀하의 목표 중 하나를 누른 다음 그것은 잘못된 일을하거나 SCons에 버그가 있습니다.

예를 들어 컴파일 플래그에 대해 이야기하고 있다면. -O0에서 -O2로 변경하려고한다고 가정 해보십시오. 가장 간단한 경우, 당신은 것입니다 :

당신은 SCons는 실행
env = Environment(CCFLAGS = '-O0') 
env.Program(target = 'foo', source = 'foo.c') 

, 그것은 foo.o하는 foo.c를 컴파일하고에서 foo는 파일 (.exe)을 작성합니다. 그리고이를 다음과 같이 변경하면 :

env = Environment(CCFLAGS = '-O2') 
env.Program(target = 'foo', source = 'foo.c') 

그러면 scons는 env에 정의 된 모든 대상을 다시 작성합니다. 이것은 명령 행이 목표에 대한 내재 된 종속성이기 때문입니다. 따라서 CCFLAGS를 변경하면 종속성 값이 변경되어 "foo"대상이 재구성됩니다.

어쩌면 진짜 질문은 "명령 행 옵션을 변경 했는데도 왜 내 타겟을 다시 작성하지 않는 이유는 무엇입니까?"와 같을 수도 있습니다. 어쨌든 당신은 재건을 시도하고 강제하기 위해 인공적인 것을 추가하는 것보다는 관련된 실제 종속성에 관해 생각할 필요가있을 것이다.

+0

O 수준의 변경은 정확히 내가 처리하고있는 수준입니다. 스콘이 재건축을해야한다는 것을 알지 못했습니까? –

+1

나는 .sconsign.dblite 캐시 파일에서 마지막 시간의 명령 줄을 해시의 일부로 저장한다고 생각합니다. – richq

+0

허, 필자가 설정 한 새 프로젝트에서 -O 레벨을 변경해 보았습니다. 올바르게 다시 빌드됩니다. 다른 프로젝트에 무엇이 잘못되었는지 확신하지 못했습니다. –

관련 문제