2014-12-28 2 views
1

"make all"을 입력하여 사진의 축소판을 생성하려면 make를 사용하려고합니다. 섬네일이 아직 생성되지 않은 경우 모두 만들어야합니다. 그렇지 않으면 수정 된 사진의 미리보기가 생성됩니다. 이를 위해서는 각 종속성 (사진)에 대해 하나의 대상 (축소판)이 필요합니다. 내 코드는 다음과 같습니다.메이크 파일에서 하나의 종속성에 대한 하나의 타겟

input = pictures/*.jpg 
output = $(subst pictures,thumbs,$(wildcard $(input))) 
all : $(output) 
    echo "Thumbnails generated !" 

$(output) : $(input) 
    echo "Converting ..." 
    convert -thumbnail 100 $(subst thumbs,pictures,[email protected]) [email protected] 

어떻게하면 원하는 결과를 얻을 수 있습니까?

답변

0

귀하의 문제는 output 변수는 모든 출력 파일의 목록이 줄

$(output) : $(input) 

입니다.

input 변수는 와일드 카드 패턴입니다.

이것은 의 전제 어떤 파일 모든 출력 파일을 재 구축 할 필요가있는 것으로서 알 수 변경되면 수단 와일드 패턴마다 출력 대상을 설정한다.

이에 대한 수정 패턴 thumbs/%에 대해 그들을 일치하고 % 일치하는 부분을 사용하여 $(output)의 모든 파일을 만들라고이

$(output) : thumbs/% : pictures/% 

같은 static pattern rule를 사용하는 중입니다합니다 (stem라고)을 필수 구성 패턴 (pictures/%)으로 입력하십시오.

다른 방법으로는 각 입력 파일에 대한 명시 적 thumbs/file.jpg: pictures/file.jpg 대상/전제 조건 쌍을 생성하기 위해 eval 함수를 사용

infiles = $(wildcard pictures/*.jpg) 
$(foreach file,$(infiles),$(eval $(subst pictures/,thumbs/,$(file)): $(file))) 

$(output): 
    echo "Converting ..." 
    convert -thumbnail 100 $(subst thumbs,pictures,[email protected]) [email protected] 

처럼 뭔가 각 파일에 대해 특정 입력/출력 일치 세트를 구성 할 수있다.

관련 문제