2012-09-23 2 views
2

터미널 창에서 최근에 nodemon을 사용하여 변경 사항을 저장할 때마다 Node.js 프로그램을 실행하여 버릇이 없습니다.Makefile 의존성에 대한 "watch"/ "monitor"/ "guard"프로그램이 있습니까?

내가 가지고있는 C++ 코드와 비슷한 것을하고 싶습니다. 내 실제 프로젝트에는 많은 소스 파일이 있지만 다음 예제를 가정하면 sample.dat, program.c 또는 header.h으로 변경 사항을 저장할 때마다 make을 자동으로 실행하고 싶습니다.

test: program sample.dat 
    ./program < sample.dat 

program: program.c header.h 
    gcc program.c -o program 

기존 솔루션이 있습니까?

내 지식 만 리눅스 inotifywait을 (지원하는 플랫폼에있는 경우

+2

리눅스 사용자는 bash 스크립트와'inotifywait'을 사용할 수 있습니다. – Dan

+0

다음은 꽤 좋은 모니터 모드를 가진 다른 빌드 시스템입니다 : http://gittup.org/tup/ 그냥'tup monitor -a -f'를 실행하십시오 – leafo

+0

이 질문은 http://stackoverflow.com의 중복이라고 생각합니다./questions/1515730/is-there-a-command-like-watch-or-inotifywait-on-the-mac 또는 적어도 fswatch 응답은 http : // stackoverflow와 같은 질문에 답합니다.co.kr/questions/1515730/is-there-a-command-like-watch-or-inotifywait-on-the-maC# 답 13807906 – Nathan

답변

5

(..에 IDE를 발사하지 않고 내가 십오 일을 많이하면 파일을 변경할 때 프로젝트가 다시 할 수있어) 있지만 이후

inotifywait --exclude '.*\.swp|.*\.o|.*~' --event MODIFY -q -m -r . | 
while read 
do make 
done 

그 아래 속보 :

inotifywait 
당신이 뭔가를 할 수 있습니다), OS X에 대한 this question를 참조하십시오, 당신은 그것에 대해 당신이 리눅스에있어 좋은 기회가 보인다 확인 물었다

파일 시스템 이벤트를 수신합니다.

--exclude '.*\.swp|.*\.o|.*~' 

는 (아마 당신은이 목록에 추가 할 수 있습니다) .swp, .o 또는 ~로 끝나는 파일을 제외합니다.

--event MODIFY 

찾을 때 이벤트가 발생한 파일의 파일 경로를 출력하십시오.

-q 

시작 메시지를 인쇄하지 마십시오. 따라서 make가 조기에 호출되지 않습니다.

-m 

계속 들어요.

-r . 

현재 디렉토리에서 재귀 적으로 듣기. 그런 다음 모든 루프를 읽을 때마다 make를 호출하는 간단한 루프로 파이프됩니다.

필요에 맞게 조정하십시오. inotifywait --help이 있으며 맨 페이지가 도움이 될 수 있습니다.


다음은 자세한 스크립트입니다. 나는 그것을 많이 테스트하지 않았으므로 분별력을 가지고 사용하십시오. Git에서 분기를 전환 할 때와 같이 빌드가 불필요하게 반복해서 발생하지 않도록하기위한 것입니다.

#!/bin/sh 
datestampFormat="%Y%m%d%H%M%S" 
lastrun=$(date +$datestampFormat) 
inotifywait --exclude '.*\.swp|.*\.o|.*~' \ 
      --event MODIFY \ 
      --timefmt $datestampFormat \ 
      --format %T \ 
      -q -m -r . | 
while read modified; do 
    if [ $modified -gt $lastrun ]; then 
     make 
     lastrun=$(date +$datestampFormat) 
    fi 
done