вторник, 6 декабря 2011 г.

Автоматическая пересборка проекта при изменении файлов

Данная задача актуальна в первую очередь вэб-проектам — в данном случае сборка обычно заключается в быстром препроцессинге и копировании файлов, так что хочется чтобы она происходила постоянно при каждом изменении файлов. В Django например подобная функциональность встроена в его вэб-сервер, который следит за изменениями файлов в проекте и перезапускает сам себя, если таковые обнаружит. Если же, как в моём случае, никакого django не используется, а применяется простой GNU Make, приходится прибегать к встроенной возможности ОС Linux — инструменту inotify.

Итак, если вы используете Ubuntu, надо установить пакет inotify-tools — оттуда нам понадобится утилита inotifywait. Получается вот такой Makefile:

.PHONY: watch ❶

all:
    echo "Make all called!"

watch:
    while inotifywait -e modify -r ../ \
        --exclude "(\./build/.*|.*\.swp)" ; \
    do make -C $(CURDIR); done # Call this Makefile again with default target
  1. Отмечаем нашу цель как .PHONY — это значит что она не создаёт никаких файлов и будет выполнена в любом случае (даже если файл watch уже существует)
  2. Конкретно в нашей целе мы бесконечно ждём события modify в папке уровнем выше, за исключением папки "build" (в ней находится этот Makefile) и файлов с расширением .swp (их создаёт редактор Vim  и постоянно обновляет, при каждом введённом символе).
    Если это событие наступает, мы воплняем цель по умолчанию из этого же Makefile (по умолчанию это цель all)
Похожий вопрос на Superuser.com.

Комментариев нет:

Отправить комментарий