2009-04-20 12 views
5

Podążam za wskazówkami na stronie Using Check with the Autotools, próbując wesprzeć test jednostki w (obecnie) małym projekcie C. Chociaż używam Cgreen zamiast Check.Przenośny odpowiednik GNU: reguła wzoru% stylu

Mam problem z krokiem 9, który powoduje, że automake emituje ostrzeżenie o użyciu `% '- reguł wzorca stylu będących rozszerzeniem GNU make.

Szczególna make zasada:

check_%.$(OBJEXT) : $(srcdir)/%.c 
    $(COMPILE) -DCHECKING -c -o [email protected] $^ 

Zastanawiam się, czy istnieje równoważny sposób określania tej reguły, które nie opierają się na GNU make rozszerzeń.

Odpowiedz

7

Przenośne reguły tworzenia mogą używać tylko różnych przyrostków, przedrostki powinny być takie same.

.c.o: 
     $(COMPILE) -DCHECKING -c -o [email protected] $< 

Jednak przyrostek niekoniecznie rozpoczyna się kropką. (W takim przypadku trzeba powiedzieć Automake co się przyrostki są, ponieważ nie można odgadnąć.) Tak na przykład można mieć coś jakby zmienić nazwę następująco check_showdns.o do showdns_check.o:

SUFFIXES = _check.o 
check_libapdns_LDADD  = @[email protected] showdns_check.o 
.c_check.o: 
     $(COMPILE) -DCHECKING -c -o [email protected] $< 
+0

Świetna propozycja. Naprawia problem. Skończyło się na użyciu prefiksu _test zamiast _check. – Wes

-2

wolałbym spróbować wyłączyć ostrzeżenie lub po prostu je zignoruj. GNU make istnieje dla wszystkich odpowiednich uniksopodobnych platform; nie ma praktycznego powodu, aby spędzać czas na utrzymywaniu przenośności plików Makefile. GNU make jest również pod względem funkcjonalnym lepsze od większości innych dialektów.

+0

To prawda, ale byłoby miło, gdyby nie trzeba było instalować dodatkowego narzędzia, gdy system operacyjny hosta zapewnia go po wyjęciu z pudełka. – Wes

+0

Ale zastanów się, ile czasu musisz poświęcić na utrzymywanie przenośnego pliku Makefile. Jeśli kierujesz się wyłącznie na GNU, znacznie ułatwisz pisanie plików Makefile i zyskasz więcej czasu na ulepszanie aplikacji i naprawianie błędów. – JesperE

+1

Dobra historia, czy nazywasz wszystkie pliki Makefile GNUMake tak, jak powinieneś, jeśli celujesz w GNU Make only? Wymaganie, aby wszyscy "robili" GNU Make, a nie oznaczało chęci złamania kompatybilności ze standardową marką za pomocą GNUMakefile jest standardową praktyką teraz dzięki "nie trać czasu na utrzymywanie przenośnego makefile" – MkV