wenn mehrere Musterregeln mit einem Ziel übereinstimmen
DasGNU make manual sagt
Es ist möglich, dass mehr als eine Musterregel diese Kriterien erfüllt. In diesem Fall wählt make die Regel mit dem kürzesten Stamm (dh das Muster, das am genauesten passt).
So hat es mich überrascht, dass:
$ 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
Mehrere Musterregeln stimmen mit dem Ziel überein, und seit dem Stamm für die%_specific.o : %_specific.cpp
Regel ('make' in diesem Fall) ist kürzer als der Stamm für die%.o : %.cpp
Regel, ich habe erwartet, dass die spezifische Regel ausgewählt wird, aber das ist nicht der Fall.
Was vermisse ich?