2016-10-16 2 views
0

mdpdf으로 컴파일하기 위해 pandoc을 사용하는 데 필요한 최소 makefile은 다음과 같습니다. make watch 명령은 변경된 md 파일 (fswatch 사용)을 감시하고 이에 해당하는 경우 make을 트리거합니다.변경된 파일 만 수정하는 파일 목록 fswatch

SRCS=$(wildcard *.md) 
PDFS=$(SRCS:.md=.pdf) 

all: $(PDFS) 

%.pdf: %.md 
    @pandoc $< -o [email protected] 

watch: $(SRCS) 
    @fswatch -o $^ | xargs -n1 -I{} make 

현재 watch은 매우 선택적되지 않습니다 : 하나 md 파일이 변경되는 경우에도, 그것은 모든 가능한 목표 (PDFS의 모든)를 구축합니다. 모든 변경 파일을 md 개의 파일로 감시하지만이 코드는 에 대해 pdf 만 변경하고md 개의 파일 만 변경하는이 코드 버전을 사용하고 싶습니다. (이 경우 현재로서는 아무런 의미가 없다는 것을 알지만 다른 복잡한 사례에서는 유용합니다.)

답변

0

다음은 작동하는 것 같다 : fswatch에 의해 반환

@fswatch -0 $^ | xargs -0 -n1 sh -c 'ALT=`basename "$$1"`; make $${ALT/.md/.pdf}' _ 

$$1/path/to/changed_file.md로 확인 끝납니다. 몇 개의 문자열 조작은 changed_file.pdf으로, make으로 입력됩니다.

0

다시 작성하려는 대상을 명령 줄에서 목표 대상으로 전달하지 않는 이유는 무엇입니까? ?

@fswatch -o $^ | xargs -n1 -I{} $(MAKE) '{}' 
+0

감사합니다. 그러나 이것은 작동하지 않습니다. make [1] : *** 타겟 '1'을 만드는 규칙이 없습니다. 중지. –

+0

정말'{}'이 필요하지는 않습니다. 음, fswatch가 어떻게 작동하는지 모르겠습니다. 분명히 뭔가가 예상대로 출력되지 않습니다 (예 : 한 줄에 하나의 파일 이름이 수정 된 파일 목록을 인쇄하는 것만은 아닙니다). xargs 명령에'-t' 또는'--verbose' 옵션을 추가하고 xargs 명령이 실제로 호출하는 것을 살펴볼 것을 권한다. 또한 쉘 프롬프트에서'fswatch' 명령을 실행하여 생성되는 출력을 살펴 봐야합니다. – MadScientist

+1

방금 ​​온라인 문서를 살펴 보았습니다. http://emcrisostomo.github.io/fswatch/doc/1.9.3/fswatch.html/Tutorial-Introduction-to-fswatch.html#Detecting-File-System-Changes You don '-o' 옵션을 분명히 원합니다. 단지 변경 사항 수가 인쇄됩니다. 실제로 변경된 파일을 인쇄하는 주 모드가 필요합니다. – MadScientist