2010-02-12 5 views
1

디렉토리의 모든 JPEG 파일을 PNG로 변환하는 SConstruct 파일을 작성하고 싶습니다.SCons - 디렉토리의 모든 이미지를 변환하십시오.

은 내가 빌더 확실히 있다고 생각 :

ConvToPNG = Builder(action = 'convert $SOURCE $TARGET', 
     suffix = '.png', 
     src_suffix = '.jpg') 
env['BUILDERS']['ConvToPNG'] = ConvToPNG 

을하지만 그때 나는 구축 할 필요가있는 모든 대상 목록을 만드는 방법을 모르겠어요. 나는이 같은 파이썬-Y 방식으로 작업을 수행 할 수 있습니다

pix_conversions = [env.ConvToPNG(jpg_src) for jpg_src in Glob('pix/img_*.jpg')] 

그리고 어쩌면 내가 사람들을위한 별칭 사용합니다 :

env.Alias('convert_all', pix_conversions) 

아니면 손으로 노드를 만들기를하며 Depends이 전환 수.

이것은 스캐너와 같이 만들어 졌던 것처럼 보입니다. 그러나 나는 잘 작동하도록 할 수 없었다. 필자는 디렉토리에서 작업 할 빌더를 만들었고 많은 대상을 추가하는 스캐너를 호출했지만 SCons 내부는 빌더가 파일에서 실행되기를 기대하기 때문에 작동하지 않았습니다. (또는 적어도 내가 오류 메시지에서 수집 한 것).

더 많은 SCons-y 방법이 있습니까?

+0

재미있게 놀고 있습니까? 변환을 보지 않으면 ImageMagick 도구 (www.imagemagick.org) –

+0

그냥 업데이트 : SCons 괜찮아요,하지만 일단 우리가 실제 디렉토리에 50,000 이미지와 함께 실제 데이터를 실행하려고하면, SCons는 절반 같은 ​​지출을 시작했다. 1 시간 동안 어떤 이미지를 변환 할 것인가? 그래서 나는'make '로 바꿨고 모든 것이 괜찮습니다 ... * 한숨 * – rescdsk

답변

1

귀하의 단계는 잘 보이지만, 별칭 노드 당신은 AlwaysBuild 함수에 전달해야

env.AlwaysBuild(env.Alias('convert_all', pix_conversions)) 

그래서 최종 결과는 다음과 같습니다

ConvToPNG = Builder(action = 'convert $SOURCE $TARGET', 
     suffix = '.png', 
     src_suffix = '.jpg') 
env['BUILDERS']['ConvToPNG'] = ConvToPNG 
pix_conversions = [env.ConvToPNG(jpg_src) for jpg_src in Glob('pix/img_*.jpg')] 
env.AlwaysBuild(env.Alias('convert_all', pix_conversions)) 

그것은 어떤 스캐너없이 잘 작동합니다. SCons는 JPEG 파일의 MD5 해시를 확인하고 마지막 변환 이후 변경된 파일이 있으면 빌더가 다시 시작됩니다.

+0

이 경우 AlwaysBuild 함수가하는 일을 좀 더 설명 할 수 있습니까? 감사합니다. – rescdsk

+1

http://www.scons.org/doc/0.97/HTML/scons-user/x1030.html –

+0

@Ross Rogers - 그 페이지를 보았지만 나에게 너무 추상적 인 것 --- AlwaysBuild force convert_all 항상 시대에 뒤 떨어진다는 말인가? 그것은 .png가 항상 최신인지를 항상 확인한다는 의미입니까, 아니면 항상 다시 빌드한다는 것을 의미합니까? 두 분 모두 감사합니다 !! – rescdsk

1

스캐너는 암시 적으로 종속성입니다.

foo.c에 따라 #includebar.c이되는 foo을 만들고 싶습니다. 당신이 의존성 foo.cfoo를 구축하는 SCons는 말할 때 따라서는 C scanner 자동으로 명시 적 의존성 foo.c에 따라 암시 의존성 bar.c을 선택할 것입니다.

+1

예제는 bar.h로 더 명확 해집니다 :) – BenG