Почему * и% ведут себя по-разному в этом правиле? - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь сделать каждый объектный файл foo.o зависимым от его исходного файла foo.c. По какой-то причине использование *, чтобы сделать каждый зависимым от каждого исходного файла (так что foo.o зависит от foo.c, bar.c, etc., работает, но использование% дает ошибку.

Моя структура каталогов сейчас имеет только один исходный файл, но я планирую добавить еще. Я получаю ошибку:

$(PATHO)%.o:: $(PATHT)*.c  # This compiles properly
  recipe

$(PATHO)%.o:: $(PATHT)%.c  # This causes error 'No rule to make target'
  recipe

РЕДАКТИРОВАТЬ: Я прояснил свой вопрос, извинения за любую путаницу.

1 Ответ

0 голосов
/ 09 января 2019

Когда % в целевом образце совпадает, % в предпосылках расширяется до соответствующей части в целевом.

Например, допустим, у вас есть правило

%.o: %.c
    $(CC) $(CFLAGS) -c $^

Когда foo.o соответствует цели правила (%.o), обязательным условием является foo.c.

Это объясняется, например, в руководстве по GNU Make, раздел Введение в правила шаблонов , и работает одинаково во всех вариантах make.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...