GNU make manual mówigdy wiele reguł wzór pasuje ruchomym celem
Jest możliwe, że więcej niż jedna reguła wzór będzie spełniać te kryteria. W takim przypadku make wybierze regułę z najkrótszym trzpieniem (czyli wzorcem, który pasuje najbardziej).
Więc to mnie zaskoczyło, że:
$ touch make_specific.cpp
$ cat Makefile.general_first
%.o: %.cpp
@echo using general rule
$(CXX) -c $< -o [email protected]
%_specific.o: %_specific.cpp
@echo using specific rule
$(CXX) -c $< -o [email protected]
$ make -B -f Makefile.general_first make_specific.o
using general rule
g++44 -c make_specific.cpp -o make_specific.o
wiele reguł wzór pasuje do celu, a od trzonu do %_specific.o : %_specific.cpp
reguły („make” w tym przypadku) jest krótszy niż łodygi na %.o : %.cpp
zasada, spodziewałem się, że wybrana zostanie konkretna reguła, ale tak nie jest.
Czego mi brakuje?
Dzięki. Używam 3,81, więc jest to najprawdopodobniej przyczyną. Oczekiwanie na sysadmins, aby zainstalować 3.82 w celu weryfikacji. –
Czy można to osiągnąć za pomocą clearmake zamiast GNU make? Nie mogę znaleźć żadnych informacji o wyborze reguły wzorca w clearmake ... – dragonator
Dzięki. Drapałem się w głowę, próbując zrozumieć, dlaczego tak się dzieje. Mój błąd; Nigdy nie zwracałem uwagi na numer wersji, której używałem :) – Fernando