quando várias regras de padrão correspondem a um alvo

oGNU faz manual diz

É possível que mais de uma regra padrão atenda a esses critérios. Nesse caso, o make escolherá a regra com o menor caule (ou seja, o padrão que corresponde mais especificamente).

Então me surpreendeu isso:

$ 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

Múltiplas regras padrão correspondem ao alvo e, como a haste para o%_specific.o : %_specific.cpp regra ('fazer', neste caso) é mais curta do que a haste para o%.o : %.cpp regra, eu esperava que a regra específica fosse selecionada, mas não é.

o que estou perdendo?

questionAnswers(1)

yourAnswerToTheQuestion