좋습니다. 일부 SCons 설명이 우선입니다. 스콘은 빌드를 수행하는 데 두 단계가 있습니다. 먼저 분석 단계에서 모두 Scons 스크립트가 실행되고 그 결과는 스크립트에 정의 된 모든 빌더의 소스 및 대상 파일을 설명하는 정적 종속성 트리입니다. 그런 다음 해당 트리, 마지막 빌드의 데이터베이스 빌드 및 디스크의 파일 서명을 기반으로 오래된 목표를 가진 모든 빌더가 다시 빌드됩니다.
질문에 답변드립니다. 필요한 경우에만 generate
을 실행하려면 (generate
또는 구성 파일이 변경된 경우) 분석 단계의 일부로 generate
을 실행하는 것이 좋습니다. 따라서 Execute()
을 사용하지 마십시오. 대신 generate
은 자체 빌더 여야합니다. 여태까지는 그런대로 잘됐다.
이제 두 명의 빌더 인 첫 번째 빌더 generate
과 두 번째 빌더 인 나는 이것을 buildObject
이라고합니다. buildObject
은 generate
의 대상에 의존하지만 상태에 따라 generate
대상은 분석시 알 수 없습니다 (generate
이 실행되지 않으므로 빌더로만 설정 됨). 분석 시간에 알 수없는 목표를 갖는 것은 SCons의 고전적인 과제이며이를 해결하는 쉬운 방법은 없습니다.
나는 보통 SCons.pleaser
파일을 사용하여 문제를 해결합니다. generate
에 고해상도 타임 스탬프가 포함되어 생성되는 것은 알려진 대상이됩니다. 그러면 buildObject
빌더가이 파일을 소스로 사용합니다. 이제 구성 파일이 변경되지 않으면 generate
이 실행되지 않고 SCons.pleaser가 변경되지 않고 buildObject
이 실행되지 않습니다. 구성 파일을 변경하면 generate가 실행되고 SCons.pleaser는 변경되며 buildObject
도 실행됩니다.
감사