gdy wiele reguł wzorca pasuje do celu
ThePodręcznik GNU make mówi
Możliwe, że więcej niż jedna reguła wzoru spełni te kryteria. W takim przypadku make wybierze regułę z najkrótszym trzonem (czyli wzorem, który pasuje najbardziej).
Zaskoczyło mnie to, że:
$ touch make_specific.cpp
$ cat Makefile.general_first
%.o: %.cpp
@echo using general rule
$(CXX) -c $ touch make_specific.cpp
$ cat Makefile.general_first
%.o: %.cpp
@echo using general rule
$(CXX) -c $< -o $@
%_specific.o: %_specific.cpp
@echo using specific rule
$(CXX) -c $< -o $@
$ make -B -f Makefile.general_first make_specific.o
using general rule
g++44 -c make_specific.cpp -o make_specific.o
lt; -o $@
%_specific.o: %_specific.cpp
@echo using specific rule
$(CXX) -c $ touch make_specific.cpp
$ cat Makefile.general_first
%.o: %.cpp
@echo using general rule
$(CXX) -c $< -o $@
%_specific.o: %_specific.cpp
@echo using specific rule
$(CXX) -c $< -o $@
$ make -B -f Makefile.general_first make_specific.o
using general rule
g++44 -c make_specific.cpp -o make_specific.o
lt; -o $@
$ make -B -f Makefile.general_first make_specific.o
using general rule
g++44 -c make_specific.cpp -o make_specific.o
Wiele reguł wzoru pasuje do celu, a od trzonu do%_specific.o : %_specific.cpp
reguła (w tym przypadku „make”) jest krótsza niż trzonek dla%.o : %.cpp
reguła, spodziewałem się, że konkretna reguła zostanie wybrana, ale tak nie jest.
czego mi brakuje?