Проблема с подстановочным знаком makefile '%' на Mac Mojave - PullRequest
0 голосов
/ 15 ноября 2018

Я делаю проект на языке c и использую инфраструктуру тестирования на единство.Я скачал их makefile напрямую, но у меня проблема с ним на моем Mac (Mojave).Основной вывод заключается в том, что подстановочный знак «%» в определениях целей, похоже, не работает.

Со следующим правилом:

PATHR = build/results/
$(PATHR)%.txt: $(PATHB)%.$(TARGET_EXTENSION)
    -./$< > $@ 2>&1

Я получаю следующую ошибку make:

make: *** No rule to make target `build/results/TestVectorCode.txt', needed by `test'.  Stop.

Однако, если я определю правило явно без '%' какследует:

build/results/TestVectorCode.txt: $(PATHB)%.$(TARGET_EXTENSION)
    -./$< > $@ 2>&1

Я не получаю ошибку make.Есть мысли?

1 Ответ

0 голосов
/ 15 ноября 2018

Это сообщение означает, что предварительное условие вашего правила не найдено и не может быть создано (под «предварительным условием» я имею в виду $(PATHB)TestVectorCode.$(TARGET_EXTENSION) - вы не показываете значения этих переменных, поэтому я не могу их развернуть) для вас).

Шаблонное правило предлагает один из возможных способов , что цель может быть построена. Может быть много шаблонов, которые могут создать одну и ту же цель, поэтому тот факт, что один из них не совпадает, сам по себе не смертелен. Только если все они не совпадают, выдает эту ошибку, что не может найти никакого правила для построения цели.

У вас должна быть опечатка в вашем примере "правила, которые работают", потому что, конечно, она не полагается на файл с именем %, верно?

Если вы не можете понять это, попробуйте запустить make -d build/results/TestVectorCode.txt и проверить вывод, чтобы понять, почему make отклоняет ваше правило шаблона (возможно, перенаправьте вывод, потому что это будет много).

Другое дело, что я знаю, что версия GNU make, поставляемая с Xcode, очень старая и содержит ошибки. Я не думаю, что они вызовут что-то подобное, но я не уверен. Если вы можете, вы можете попробовать установить последнюю версию GNU make с помощью brew (например) и посмотреть, получаете ли вы такое же поведение.

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