Подтвердить что ты не робот

Правило Makefile, которое зависит от всех файлов в каталоге (в том числе внутри подкаталогов)

Одно правило в моем Makefile застегивает весь каталог (res/) в ZIP файл. Очевидно, это правило должно выполняться, когда изменяется любой файл в каталоге res/. Таким образом, я хочу, чтобы правило имело обязательное условие для всех файлов под этим каталогом. Как я могу реализовать это правило?

В Bash с включенной опцией globstar вы можете получить список всех файлов в этом каталоге с использованием шаблона подстановки res/**/*. Однако, похоже, что это не сработает, если вы укажете его как обязательное условие в Makefile:

filename.jar: res/**/*

Даже после touch ввода файла в res/, сделайте еще отчеты

make: `filename.jar' is up to date.

так ясно, что он не распознает шаблон.

Если я объявляю каталог как обязательное условие:

filename.jar: res

то Make не будет повторно выполняться, когда файл будет изменен (я думаю, что make смотрит только на измененную дату самого каталога, которая изменяется только при добавлении, удалении или переименовании непосредственных дочерних элементов).

4b9b3361

Ответ 1

Это:

filename.jar: $(wildcard res/**/*)

похоже, работает, по крайней мере, на некоторых платформах.

EDIT:

Или лучше, просто отрежьте узел:

filename.jar: $(shell find res -type f)