2012-01-20 8 views
8

Chciałbym użyć jednego Makefile do generowania celów w setkach podkatalogów. Każdy podkatalog jest datownikiem/datą w następujący sposób: 20120119_153957, który pasuje do następującego wzoru: ????????_??????. Nie ma innych podkatalogów pasujących do tego wzorca.Jak automatycznie generować listę celów docelowych przez globowanie podkatalogów?

Jeden cel, który chciałbym wygenerować, nazywa się ????????_??????/graph.pdf. Mam skrypt o nazwie make_graph, który spowoduje, że wykres otrzyma nazwę podkatalogu. Nie jestem jednak pewien, jak napisać plik Makefile, który automatycznie globalizuje wszystkie podkatalogi i generuje te cele programowo.

Na przykład kod SUBDIRS:=????????_?????? wydaje się poprawnie globalnie wszystkie podkatalogi. Mogę skontaktować się z tą zasadą:

.PHONY: print 
print: 
     echo $(SUBDIRS) 

Jednak ta zmienna cesja

TARGETS:=$(SUBDIRS:%=%/graph.pdf) 

nie wydaje się robić to, czego oczekuję i przypisać wiele, wiele celów. Zamiast tego poniższa reguła po prostu drukuje jeden cel.

.PHONY: print 
print: 
     echo $(TARGETS) 

Jest to bardzo kłopotliwe, że SUBDIRS powinien posiadać odpowiednie podkatalogi ale TARGET ma tylko jeden plik.

+0

Czy jest to duplikat [Jak używać symbolu wieloznacznego przy tworzeniu znaku?] (Http://stackoverflow.com/questions/8937430/how-to-use-wildcard-with-make) –

+0

Tak, to jest pełne pytanie. Przypadkowo wysłałem częściowe pytanie z tytułem "Jak używać symboli wieloznacznych przy użyciu make?". Próbowałem zamknąć lub usunąć to inne pytanie i skierować ludzi do tego. Westchnienie. –

+0

Już odpowiedziałem na to pytanie. :( –

Odpowiedz

14

W twoim przykładzie dopasowanie globalne jest wykonywane przez powłokę.

GNU make posiada wbudowany wildcard function, które można użyć w następujący sposób:

SUBDIRS := $(wildcard ????????_??????) 

Teraz można użyć tej zmiennej skonstruować listę celów:

.PHONY : all 
all : $(SUBDIRS:%=%/graph.pdf) 

%/graph.pdf : # list prerequisites here. 
    # recipe to make '[email protected]' in directory '$(@D)' from '$^'. 

Zobacz także: pattern rules, automatic variables.

+0

To działało bardzo dobrze.Dziękuję! –

+0

@ NathanFarrington, nie ma za co! –

Powiązane problemy