2010-05-01 2 views
0
xpi_built := $(build_dir)/$(install_rdf) \ 
      $(build_dir)/$(chrome_manifest) \ 
      $(chrome_jar_file) \ 
      $(default_prefs) 

xpi_built_no_dir := $(subst $(build_dir)/,,$(xpi_built)) 

$(xpi_file): $(build_dir) $(xpi_built) 
@echo "Creating XPI file." 
cd $(build_dir); $(ZIP) ../$(xpi_file) $(xpi_built_no_dir) 
@echo "Creating XPI file. Done!" 

$(build_dir)/%: % 
cp -f $< [email protected] 

$(build_dir): 
@if [ ! -x $(build_dir) ]; \ 
    then \ 
    mkdir $(build_dir); \ 
    fi 

누구나 나에게이 메이크 파일 부분을 설명 할 수 있습니까? 특히 설명 메이크 파일

  • $(build_dir)/%: %

    뿐만 아니라 $<[email protected] 지시
  • 두 개의 레이블 $(build_dir) 내가 모두 실행 추측 존재하지만, 어떤 순서에 관심?

답변

2
$(build_dir)/%: % 
    cp -f $< [email protected] 

이것은 명령에서 자동 변수를 사용하는 정적 패턴 규칙입니다. $<은 맨 왼쪽 전제 조건으로 확장되고 [email protected]은 대상으로 확장됩니다. 당신이 (무엇이든 $(build_dir)) $(build_dir)/foo을하려고하면,

$(build_dir): 
    @if [ ! -x $(build_dir) ]; \ 
    then \ 
    mkdir $(build_dir); \ 
    fi 

자체 $(build_dir)위한 것이며, 불필요하게 복잡

$(build_dir)/foo: foo 
    cp -f foo $(build_dir)/foo 

다음 규칙으로이 규칙을 취급합니다.

$(xpi_file): $(build_dir) $(xpi_built) 

그래서 의지를 확인 :

$(build_dir): 
    mkdir [email protected] 

그것은 당신의 주요 목표 인 경우 $(xpi_file)로 보이는 : 그것은 "$(build_dir)이 존재하지 않을 경우, 다음을 만들어라 (mkdir)", 그리고이 방법을 쓸 수 말한다 먼저 $(build_dir) (필요한 경우)을 작성한 다음 %(xpi_built) 목록의 구성원으로, $(build_dir)/% 양식의 몇 가지가 포함됩니다. 이 작업이 완료되면이 규칙의 명령을 실행합니다 : $(build_dir)으로 cd하고 몇 가지를 압축 한 다음 echo 몇 가지 메시지를 실행합니다.

+0

@Beta 감사합니다. 당신을 위해 좋은 전자 책을 알고 있습니까? – Pablo

+0

@ 마이클 전자 책? Lukáš Lalinský은 내가 아는 최고의 문서 인 GNUMake 매뉴얼을 인용했다. 또한 "Advanced Auto-Dependency Generation"(고급 자동 종속성 생성)이 있는데, 이는 잘 알려져 있으며, "Recursive Make Considered 有害"(내가 생각하지 않는 인기있는 참조)입니다. – Beta

0

는 문서를 만드는 GNU에 Pattern RulesAutomatic Variables를 참조하십시오. 첫 번째 규칙은 $(build_dir)이 아니라 $(build_dir) 내부의 파일과 일치합니다. $<은 현재 규칙의 전제 조건 목록으로 확장되고 [email protected]은 현재 규칙의 대상입니다.

+0

'$ <'는 첫 번째 전제 조건을 (그냥) 확장합니다. '$ ^'가 모든 전제 조건으로 확장됩니다 –