2012-05-24 2 views
0

내 .coffee 파일을 분리하고 이미 여러 대응의 .js 파일로 컴파일하는 Makefile을 사용합니다. 내 규칙 :Makefile에서 단일 컴파일 명령으로 여러 타겟을 업데이트하는 방법은 무엇입니까?

tmp/coffee/%.js: src/js/%.coffee 
    coffee --compile --output $(@D) $? 

은 다음과 같습니다 커피 컴파일러는 한 번에 모든 업데이트 된 파일을 컴파일 한 번만 호출 될 수 있도록

$ make static 
coffee --compile --output tmp/coffee/global src/js/global/admin.coffee 
coffee --compile --output tmp/coffee/global src/js/global/ads.coffee 

내 빌드 프로세스를 최적화하고 싶습니다. 이것은 깨끗한 빌드를 위해 특히 중요합니다.

그래서이 대신과 같습니다 이미 $?를 사용하는

$ make static 
coffee --compile --output tmp/coffee/global src/js/global/ads.coffee src/js/global/admin.coffee 

답변

1

, 당신이 정말로 필요로하는 모든 대상이 모든 파일에 의존하는 것입니다. 어쩌면 당신은 별도의 플래그 파일을 유지하려면, .built 말 :

.built: $(wildcard src/js/global/*.coffee) 
     coffee --compile --output tmp/coffee/global $? 
     touch [email protected] 

당신은 아마 당신이 코드 중복을하지 않아도 기존의 메이크를 리팩토링하는 것이 좋습니다. 나는 모든 파일을 믿고있어

는 기존의 코드를 귀하의 예 말처럼 ​​global에 있지만. 여러 하위 디렉토리가있는 경우, 당신은 하나 개의 이동합니다 (--output 매개 변수는 아마도 각각 달라야합니다)에 그들 모두를 컴파일 할 수 없습니다.

+0

는 그 ^이 $ 없습니다 $해야 하는가? –

+0

그렇게해서는 안됩니다. http://www.gnu.org/software/make/manual/html_node/Automatic-Variables.html#index-g_t_0024_003f-944 – tripleee

+0

멋진 대답, 감사합니다! 나는 나의 상황 (그리고 내 상황)에 적응하기 위해 몇 가지 작업을 할 필요가 없지만, 이것은 확실히 내가 필요한 단서입니다. – Julian