2012-12-13 3 views
1

다른 타겟이 무엇인지 판단하기 위해 빌드해야하는 대상이 있습니다. SCons에게 어떻게 알리는가?SCons 대상의 빌드 타임 결정

예 :

스크립트, generate 일부 구성 파일에서 실행됩니다. 이 스크립트는 구성 파일의 정보를 기반으로 포함 경로 및 빌드 플래그를 생성합니다. SCons Object을 빌드하려면 생성 된 파일을 읽어야합니다.

generateExecute()을 실행하고 있었지만 지금은 생성 할 파일이 많아 시간이 오래 걸리므로 구성 파일이 변경 될 때만 실행하고 싶습니다. 이 Command이해야 할 일을 수행 한 후에 SCons에게 빌드 타임에 더 많은 타겟을달라고 요청하려면 어떻게해야합니까?

답변

2

좋습니다. 일부 SCons 설명이 우선입니다. 스콘은 빌드를 수행하는 데 두 단계가 있습니다. 먼저 분석 단계에서 모두 Scons 스크립트가 실행되고 그 결과는 스크립트에 정의 된 모든 빌더의 소스 및 대상 파일을 설명하는 정적 종속성 트리입니다. 그런 다음 해당 트리, 마지막 빌드의 데이터베이스 빌드 및 디스크의 파일 서명을 기반으로 오래된 목표를 가진 모든 빌더가 다시 빌드됩니다.

질문에 답변드립니다. 필요한 경우에만 generate을 실행하려면 (generate 또는 구성 파일이 변경된 경우) 분석 단계의 일부로 generate을 실행하는 것이 좋습니다. 따라서 Execute()을 사용하지 마십시오. 대신 generate은 자체 빌더 여야합니다. 여태까지는 그런대로 잘됐다.

이제 두 명의 빌더 인 첫 번째 빌더 generate과 두 번째 빌더 인 나는 이것을 buildObject이라고합니다. buildObjectgenerate의 대상에 의존하지만 상태에 따라 generate 대상은 분석시 알 수 없습니다 (generate이 실행되지 않으므로 빌더로만 설정 됨). 분석 시간에 알 수없는 목표를 갖는 것은 SCons의 고전적인 과제이며이를 해결하는 쉬운 방법은 없습니다.

나는 보통 SCons.pleaser 파일을 사용하여 문제를 해결합니다. generate에 고해상도 타임 스탬프가 포함되어 생성되는 것은 알려진 대상이됩니다. 그러면 buildObject 빌더가이 파일을 소스로 사용합니다. 이제 구성 파일이 변경되지 않으면 generate이 실행되지 않고 SCons.pleaser가 변경되지 않고 buildObject이 실행되지 않습니다. 구성 파일을 변경하면 generate가 실행되고 SCons.pleaser는 변경되며 buildObject도 실행됩니다.

감사

0

내가 갔다 해결책은이 상을 생성하는 방법을 알고 새로운 SConstruct를 만들기 위해, 그리고 내 SConscripts 초기 Execute()을 나는 그것의 출력이 필요한 비트에 도착하기 전에. SCons 내부에서 SCons를 호출하는 작은 고정 오버 헤드로 필요한만큼 빌드하기 때문에 잘 작동합니다.

관련 문제