Показаны сообщения с ярлыком make. Показать все сообщения
Показаны сообщения с ярлыком make. Показать все сообщения

вторник, 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.

среда, 26 октября 2011 г.

Ошибка cmake/make в Windows: *** target pattern contains no `%'. Stop.

Во время сборки проекта, используя cmake на Windows можно наткнутся на такую проблему:
 *** target pattern contains no `%'. Stop. 


Ошибка возникает в GNU Make 3.81 установленным через Cygwin. Проблема вызвана некорректной работой make (подробности), причём проблема эта была поправлена ещё в далёком 2008, но до сих пор по-умолчанию cygwin ставит именно неработающую версию.

Решение

  1. Исправленную версию make скачиваем тут: http://www.cmake.org/files/cygwin/make.exe 
  2. Копируем скачанный файл в C:\cygwin\bin. 
  3. Переименовываем или создаём ссылку для файла cygintl-8.dll -> cygintl-3.dll всё в той же директории c:\cygwin\bin