когда несколько шаблонных правил соответствуют цели

GNU make manual говорит

It is possible that more than one pattern rule will meet these criteria. In that case, make will choose the rule with the shortest stem (that is, the pattern that matches most specifically).

Так что меня удивило, что:

$ 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

Несколько шаблонных правил соответствуют цели, и так как основа для%_specific.o : %_specific.cpp Правило (в данном случае «make») короче, чем основа для%.o : %.cpp Я ожидал, что будет выбрано конкретное правило, но это не так.

Что мне не хватает?

Ответы на вопрос(1)

Ваш ответ на вопрос