Reguła Makefile, która zależy od wszystkich plików znajdujących się w katalogu (także w podkatalogach)

Jedna reguła w moim pliku Makefile zamyka cały katalog (res/) w pliku ZIP. Oczywiście, reguła ta musi zostać wykonana, gdy zmieni się dowolny plik w katalogu res/. Dlatego chcę, aby reguła miała jako warunek wstępny wszystkie pliki znajdujące się pod tym katalogiem. Jak mogę wdrożyć tę zasadę?

W Bash z włączoną opcją globstar można uzyskać listę wszystkich plików w tym katalogu, używając wzorca wieloznacznego res/**/*. Jednak nie wydaje się, aby praca, jeśli określisz ją jako warunek wstępny w pliku Makefile:

filename.jar: res/**/*

Nawet po touching pliku w res/, Make still reports

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

Więc najwyraźniej nie rozpoznaje wzorca.

Jeśli zadeklaruję sam katalog jako warunek wstępny:

filename.jar: res

Wtedy Make nie uruchomi się ponownie, gdy plik zostanie zmodyfikowany (myślę, że make patrzy tylko na zmodyfikowaną datę samego katalogu, która zmienia się tylko wtedy, gdy bezpośrednie dzieci są dodawane, usuwane lub zmieniane).

Author: Community, 2013-01-12

1 answers

To:

filename.jar: $(wildcard res/**/*)
Wygląda na to, że działa, przynajmniej na niektórych platformach.

EDIT:

Lub lepiej, po prostu przeciąć węzeł:

filename.jar: $(shell find res -type f)
 63
Author: Beta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-12 04:51:42