У меня есть Makefile, подобный следующему:Makefile с несколькими зависимостями для одного файла
SRCS = a.c b.cpp
OBJS = objs/a.o objs/b.o
all: $(OBJS)
objs/%.o: %.c
gcc -c $< -o [email protected]
objs/%.o: %.cpp
gcc -c $< -o [email protected]
Это, кажется, работает. Но я не понимаю, почему. Почему он не пытается сгенерировать a.cpp и b.c?
как я его прочитал: a.cpp является обязательным условием для objs/a.o, и он должен попытаться сгенерировать его. И потому что он не находит для него подходящего правила - он должен потерпеть неудачу
Где я ошибаюсь?
P.S - Я исполняю свой Makefile, используя -r -R, чтобы избежать встроенных правил
Можете ли вы направить меня туда, где это указано? Я искал его в GNU make и не мог найти его – user972014
@ user972014: В руководстве есть разделы по [правилам шаблонов] (http://www.gnu.org/software/make/manual/make.html#Pattern- Правила) и [как они соответствуют] (http://www.gnu.org/software/make/manual/make.html#Pattern-Match). Я не знаю ссылки, в которой явно указано, что списки предварительных условий не объединены, но это подразумевается в этих разделах. – Beta
Здесь. Я нашел это: «Правило шаблона может использоваться для построения данного файла только в том случае, если существует целевой шаблон, который соответствует имени файла, и все предпосылки в этом правиле либо существуют, либо могут быть созданы» – user972014