2013-01-15 7 views
1

내 프로젝트는 외부 패키지를 사용합니다. 이 패키지는 tarball로 배포되며 tarball이 업데이트되면 해당 내용이 추출됩니다.scons : 타임 스탬프에 따라 아카이브를 추출하는 방법

예를 들어 부스트를 사용합니다. 해당 외부 패키지는 boost.tar.bz2입니다. 이 패키지는 헤더 파일과 라이브러리를 포함합니다. 제가하고 싶은 것은 tarball이 업데이트 될 때 자동으로이 아카이브의 내용을 scons로 추출하는 것입니다.

"타임 스탬프 파일"을 사용하여 Makefile로이 작업을 수행 할 수 있습니다. tarball이 타임 스탬프 파일보다 새로운 경우 아카이브는 자동으로 추출됩니다.

all: external-packages 

external-packages: boost xml2 

boost: .boost-timestamp 

xml2: .xml2-timestamp 

.boost-timestamp: boost.tar.bz2 
    @echo updating boost externals 
    @tar xjf boost.tar.bz2 
    @touch .boost-timestamp 


.xml2-timestamp: xml2.tar.bz2 
    @echo updating xml2 externals 
    @tar xjf xml2.tar.bz2 
    @touch .xml2-timestamp 

clean: 
    rm -rf .*-timestamp boost xml2 

어떻게하면 scons를 사용하여 동일한 결과를 얻을 수 있습니까?

답변

1

최선의 방법은 the untar builder입니다. 당신이 추가 한 후

은 site_scons의 빌더 기능/이미 터의 추가는 SCons는 파일이 다음과 같을 수 폴더 :

당신은 그러나 풉니 다 빌더가 이미 터에 디렉토리를 고려하지 않는 것을주의해야한다
env = Environment() 
env..Append(BUILDERS = {'UnTar' : unTarBuilder}) 

external_package = "packages/boost.tar.bz2" 
archive = env.UnTar(source=external_package) 

, 따라서이 빌더와 clean

점에서이 삭제되지 않습니다 것은 이미 터 그것을 SCons는 뭔가 (사람을 포함)을 그들에 따라 그렇게 할 때마다, 그것은 헤더를 만들 수 있다는 것을 알고 있는지 확인하십시오 것입니다 untar 건축업자를 발사 할 것이다 tar 파일이 변경 될 때마다.

+0

내 문제는 압축 파일의 압축을 푸는 것이 아닙니다. 내가 성취하고자하는 일은 다른 작업을하기 전에 아카이브 압축을 푸는 것입니다. "시작"작업 만들기, 모든 압축 풀기 작업에 따라이 "시작"작업 만들기 및이 "시작"작업에 따라 다른 모든 작업을 찾았습니다. 그러나 구현하기가 매우 지루하고 (프로젝트가 매우 커서 많은 작업이 있습니다) "병렬"빌드 (scons - job 4)를 수행 할 때는 작동하지 않습니다. –

+0

scons를 사용하면 이전과 이후에 대해 생각하지 않아도되므로 종속성에 의해 해결됩니다. 어떤 것이 압축 해제 될 파일에 의존하면, 압축 해제는 이전에 수행됩니다. 따라서 UnTar를 사용하면 의존성 그래프가 정확하므로 전후에 대해 걱정할 필요가 없습니다. – daramarak

+0

@SergeWeinstock이 답변을 통해이 세부 사항을 지적하기 위해 단락을 추가했습니다. – daramarak

관련 문제