2010-06-10 5 views
1

빌드 과정 중 일부는 src/bundle/bundle에 위치한 입력 디렉토리의 tar 파일을 생성하는 것입니다. SRC/번들/SConscript : 내 SConstruct에서scons : 소스 디렉토리가 빌드 디렉토리에 복사되지 않습니다.

Import('*') 

bundleDir = Dir("bundle") 
jsontar = Command("bundle.tar", bundleDir, 
        "/home/dbender/bin/mkvgconf $SOURCE $TARGET") 

:

SConscript(Split('src/bundle/SConscript'), 
    exports='bin_env lib_env', build_dir='tmp/bundle') 

구축을 시도 :

scons: Reading SConscript files ... 
scons: done reading SConscript files. 
scons: Building targets ... 
/home/dbender/bin/mkvgconf tmp/bundle/bundle tmp/bundle/bundle.tar 
Input directory tmp/bundle/bundle not found! 
scons: *** [tmp/bundle/bundle.tar] Error 1 
scons: building terminated because of errors. 

이 분명 SRC/번들을 복사하지 않습니다 SCons는

가/tmp로 번들/bundle/bundle하지만, 나는 왜 그렇게 곤란하다.

각주 : mkvgconf의 절대 경로 이름 사용은 나쁜 습관이지만이 문제가 해결 될 때까지 중간입니다.

답변

1

SCons는 입력 내용에 대해 아무것도 모릅니다. src/bundle/bundle - 프로그램 mkvgconf은 해당 디렉토리에서 수행하는 작업을 알고 있습니다.

하나의 솔루션은 SConscript에 명시 적 종속성을 추가하는 것입니다

import os 
Depends('bundle.tar', Glob(str(bundleDir) + os.path.sep + '*')) 

또한 번들 디렉토리의 내용을 업데이트 할 때 mkvgconf 스크립트를 다시 실행된다는 것을 의미한다.

추신. build_dir 인수 이름을 variant_dir으로 변경하는 것이 좋습니다. 이전 SCons 릴리스에서 후자를 선호하므로 반대입니다.

+0

주셔서 감사합니다.이 경우 내 문제가 해결되었습니다. 재미를 위해서, 나는 재귀적인 globbing 솔루션을 찾기 위해 사냥을하고 있었고 일반적인 scons 루틴을 찾지 못했습니다. 그것에 대한 아이디어 (나는 .svn 디렉토리를 피할만큼 똑똑해야 할 것 같은데). – codehero

+0

@codehero : SCons에서하는 것은 매우 어색하며, 제대로 작동하지 않을 수 있습니다. 당신은 항상 소스 디렉토리 대신에 빌드 디렉토리를 글로브하는 것, 또는 그 반대의 경우도 있습니다. 소스 계층 구조에만 존재하기 때문에 디렉토리를 걷지는 않습니다. 프로그래밍 관련 질문을하는 일종의 웹 사이트가 있다면, 거기에 대해 물어볼 수도 있습니다. 누군가가 알게 될 것입니다 ... ;-) – richq

관련 문제