2012-06-21 1 views
0

fallback 작성 방법과 같은 것을 SCons에 구현할 수 있습니까? 예를 들어SCons의 대체 작성자

, 내 SConscript 코드를 다음 있습니다 :

if check_something(): 
    MyBuilder(a, b) 
.... 
if dont_know_how_to_build(a): 
    FallBackBuilder(a, c) 

"정상적인 빌드 방법은"활성화됩니다 만약 내가 예측할 수 없습니다. 하지만 활성화되어 있지 않고 SCons가 을 빌드하는 방법을 알고 a을 알고있을 때 FallBackBuilder을 사용했으면합니다. 물론

나는 같은 뭔가 작성하는 bossible 것을 이해 :

if check_something(): 
    MyBuilder(a, b) 
else: 
    FallBackBuilder(a, c) 

을하지만 내 SConscript/SConstruct 파일 을에 천 개 장소가 될 수 있기 때문에 나는이 솔루션 을 만족하지 않다 여기서 a에 대한 빌더를 지정할 수 있습니다.

"fallback"- 방법 과 SConscript를 지정하고 싶습니다.

당신은 어떻게 생각하십니까? 가능한가? 아니면 전혀 잘못된 방향입니까?

다른 말로 말하면 SConscript의 일부 위치에서 이미 빌더와 연관된 객체 목록을 얻을 수 있다면? 예를 들어

는 :

Builder1(a,b) 
Builder2(b,c) 
list_of_buildable_objects = get_list_of_buildable_objects() 
Builder3(c,d) 

나는이 예제에서이 같은 [a, b] 또는 무언가와 동일해야 함을 빌드 할 객체의 목록을 얻는 방법을 알고 싶어요.

+0

이것은 매우 일반적인 요청처럼 보입니다. 다른 빌드 도구에서 본 내용입니까? 그렇다면, 예를 들어 주시겠습니까? – Brady

+0

아니요, 다른 도구에서 이와 같은 것을 보지 못했지만, 꽤 특별한 질문이라고 생각합니다. 나는 약간의 질문을 명확하게하려고 애쓴다. –

답변

0

당신이 지정한대로 그렇게 할 수는 없습니다.

SConstruct/SConscripts는 SCons에게 수행 할 작업을 알리는 데 사용됩니다. 바로 그 일을하지 않습니다. 이 정보를 사용하여 종속성 트리를 작성합니다.이 소스 트리는 일부 원본 스캐너가 시스템의 모든 종속성에 대한 완벽한 그림을 작성하기 위해 추가됩니다.

이 DAG (directed acyclic graph)는 트래버스되어 올바른 명령 순서를 찾습니다.

그래프의 일부 객체는 SCons에 의해 직접 지정되며 SConstruct/SConscripts를 통해 할당되지 않습니다.

다른 대체자가 실행되고 실패한 후에이 대체 작성자를 실행 하시겠습니까? 아니면 시스템에 다른 특정 빌더가없는 대상에만 해당됩니까?