2016-10-16 20 views
0

Вот минимальный make-файл для использования pandoc для компиляции md в pdf. Команда make watch наблюдает за измененными md файлами (с использованием fswatch) и триггерами make, если это так.fswatch-ing список файлов, составляющих только измененные

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 -0 $^ | xargs -0 -n1 sh -c 'ALT=`basename "$$1"`; make $${ALT/.md/.pdf}' _ 

$$1 заканчивает отождествляется с /path/to/changed_file.md, возвращаемый fswatch. Пара строковых манипуляций дает changed_file.pdf, который подается на make.

0

Почему бы вам не передать цель, которую вы хотите воссоздать, как цель цели в командной строке ?

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

Спасибо, но это, похоже, не работает: make [1]: *** Нет правила, чтобы сделать цель «1». Стоп. –

+0

Я думаю, вам не нужно действительно '{}'. Ну, я не знаю, как работает fswatch. Очевидно, что что-то не так ожидалось с его выходом (например, это не просто печать списка файлов, которые были изменены одним именем файла в строке). Я рекомендую вам добавить параметр '-t' или' --verbose' в 'xargs' и посмотреть, что на самом деле вызывает команда xargs. Также вы должны запустить команду 'fswatch' самостоятельно из командной строки и посмотреть на вывод, который он генерирует. – MadScientist

+1

Я просто посмотрел онлайн-документы: http://emcrisostomo.github.io/fswatch/doc/1.9.3/fswatch.html/Tutorial-Introduction-to-fswatch.html#Detecting-File-System-Changes Вы не Я не хочу «-o», ясно. Это просто печатает количество изменений. Вам нужен основной режим, который печатает фактически измененные файлы. – MadScientist