2011-03-05 5 views
1

기본 대상을 만들기 전에 생성 된 C# 파일을 생성하기 위해 Ruby 스크립트에서 처리해야하는 XML 소스 파일이 있습니다. 스크립트의 시작 비용은 각 파일을 처리하는 시간보다 훨씬 길기 때문에 일반적으로 make 파일에서 수행되는 것처럼 하나씩 처리하는 것은 상당히 비효율적입니다. 내가하고 싶은 것은 그것들을 모아서 주요 대상을 업데이트하기 직전에 실행되는 스크립트 목록으로 전달하는 것입니다.GNU make에서 오래된 종속성 목록을 어떻게 수집합니까?

는 내가 지금 가지고있는 것은 무엇인가 같다 :

_generated_/%.xml.cs : %.cs 
    #execute ruby script to generate .cs file 

out.exe : a.cs b.cs _generated_/e.xml.cs .... 
    #compile .cs files 

내가 이것에 대한 평가를 사용하는 아이디어 우연히 그렇게 처리되는 파일이 .S의 접미사가와의 접미사를 가진 파일을 생성하는 경우 스크립트에 의해 처리 할 때 .T 내 생각은이 작업을 수행하는 것이 었습니다 :

%.xml : _generated_/%.xml.cs   
    $(eval SOURCE_FILES += $<) 

쉘 명령 (에코 할 것)을 평가 한 후이 없으면 그러나이 규칙은 실행되지 않습니다 - 나는 메이크업은 단순히 알고 있기 때문에 그것을 것 같아요 함수를 호출하면 파일을 생성 할 수 없습니다. 내가 가진 또 다른 아이디어는 임시 파일에 파일 목록을 수집하는 것이 었습니다.

.INTERMEDIATE source_list.txt 

    %.xml : _generated_/%.xml.cs   
     echo $< >> source_list.txt 

이것들은 모두 작동하지만,이 작업을 수행하는 더 좋은 방법이 있는지 궁금합니다.

업데이트 :이 같은 일을했다하고 결국 무엇

다음 - 평가 기능의 바보에 @ 접두사 쉘 명령이 실행되고 있음을 믿기로합니다. 목표보다 새로운 전제 조건의 목록입니다 $? -

_generated_/%.xml.cs : %.cs 
     @ $(eval DIRTY_XML += $(<)) 

out.exe : a.cs b.cs _generated_/e.xml.cs .... 
     # Create generated cs files 
     # by running ruby script with DIRTY_XML as input 
     # Compile all .cs files 

답변

0

당신은 $(filter)$?에 사용할 수 있습니다.

+0

나는 내가하는 일을 명확하게하기 위해 나의 질문을 편집했다. 나는 이것을 시험해 보았지만 $에서 date xml 파일의 목록을 생성하려고 시도한다면? .cs 파일을 컴파일하는 규칙에서 생성 된 .cs 파일을 만드는 방법을 불평하지 않습니다. 이 작업을 수행하는 한 가지 방법은 생성 된 .cs 파일이 .xml 파일에 의존하고 규칙이 단지 더미 생성 .cs 파일을 만들기 위해 터치를 실행하는 또 다른 규칙을 갖는 것입니다. 그러면 두 번째 규칙이 모든 것을 유전자 화하는 실제 작업을 수행 할 수 있습니다 그 (것)들을 컴파일하기 전에 배치에서. – Shane

3

예 : ruby-marker이라는 빈 파일을 사용하여 모든 xml 파일이 처리되었음을 나타냅니다. 수정 시간은 "x.s"파일의 수정 시간과 비교 될 수 있습니다. 그런 다음 $?을 사용하여 루비 스크립트가 마지막으로 실행 된 이후에 변경된 필수 "x.s"파일 만 선택하십시오.

main-target: ruby-marker 
    whatever... 

ruby-marker: foo.s bar.s baz.s 
    ruby-script $? 
    @touch [email protected] 
관련 문제