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?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage