cuando múltiples reglas de patrón coinciden con un objetivo

losGNU hace manual dice

Es posible que más de una regla de patrón cumpla con estos criterios. En ese caso, make seleccionará la regla con la raíz más corta (es decir, el patrón que coincida más específicamente).

Así que me sorprendió que:

$ 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

Las reglas de patrones múltiples coinciden con el objetivo, y desde la raíz de la%_specific.o : %_specific.cpp La regla ('make' en este caso) es más corta que la raíz para el%.o : %.cpp regla, esperaba que se seleccionara la regla específica, pero no lo es.

¿Qué me estoy perdiendo?

Respuestas a la pregunta(1)

Su respuesta a la pregunta