Reguła Makefile pattern dla no extension?
Mam kilka aplikacji, które są zbudowane z tego samego typu reguły make:
apps = foo bar baz
all: $(apps)
foo: foo.o $(objects)
$(link)
bar: bar.o $(objects)
$(link)
baz: baz.o $(objects)
$(link)
Gdyby miały rozszerzenie (na przykład .x
), mógłbym utworzyć regułę wzorca w stylu:
%.x: %.o $(objects)
$(link)
I nie musiałbym wypisywać nowej reguły dla każdej aplikacji.
Ale nie mają rozszerzenia, i jestem prawie pewien, że:
%: %.o $(objects)
$(link)
Nie zadziała (ponieważ określa, że do zbudowania dowolnego pliku można użyć tej reguły).
Czy jest i tak sprecyzowanie jednej zasady, która będzie obejmuje wszystkie $(apps)
zasady budowania?
3 answers
To wygląda jak zadanie dla reguła wzorca statycznego :
$(apps) : % : %.o $(objects)
$(link)
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-03-30 12:49:56
%: %.o $(objects)
$(link)
Powyższe powinno zadziałać.
Możesz ograniczyć zakres reguły, przekształcając ją w reguła wzorca statycznego , tak aby była brana pod uwagę tylko dla Twojej listy celów:
$(apps) : % : %.o $(objects) # only consider this for $(apps) targets
$(link)
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-03-30 12:51:21
Nie jest to odpowiedź na to, czego szukasz , ale powód, który może wyjaśniać, dlaczego taki poziom generycznego kodu może nie przynieść dobrych wyników. ....
Statyczne wzorce polegają na obecności łodygi, aby dopasować i zbudować łańcuch zależności. prawie w taki sam sposób jak reguły Ukryte (które są używane dla celów, które nie mają recipie.)
Widzę, co chciałeś osiągnąć, tworząc ogólną regułę, która spełni wszystkie docelowe kontrole dla obiektu i linku w Twoim kod.
Coś takiego::
% : % : $(rule1)
echo / generic code ;
Tak, że jest wywoływany dla wszystkich aplikacji w różnych scenariuszach
Ponieważ nie chcesz dodawać rozszerzenia (staje się to źródłem niektórych problemów ) problem polega na tym, że cel zostanie odzwierciedlony również w zależności, ponieważ nie będzie możliwości rozróżnienia zależności od celów.
/ Align = "center" bgcolor = "# e0ffe0 " / cesarz chin / / align = center / .. $ make -nf mk.t
mk.t:18: *** mixed implicit and static pattern rules. Stop.
:), spróbuję jeszcze raz jutro zobaczę, czy uda mi się to jakoś załatwić. Ładne pytanie.
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-03-30 20:39:38