Правило Makefile с несколькими целями для одного вызова - PullRequest
1 голос
/ 10 февраля 2020

Согласно документации gnu make , если правило генерирует несколько целей за один вызов (например, с помощью рецепта, выполняющего инструмент с несколькими выходными файлами), вы можете использовать правило '&:' синтаксис, чтобы сказать сделать. При использовании этого синтаксиса я получаю предупреждения о цели '&', однако при наличии нескольких (но уникальных) целей в нескольких правилах. Как будто ошибаетесь в амперсанде для имени цели вместо того, чтобы быть частью разделителя цели-пререквизита.

В моем первоначальном проекте у меня есть два правила с несколькими целями и рецепт, генерирующий эти цели из одно утверждение / инструмент . Цели уникальны для каждого из двух правил. Я создал следующий простой пример, чтобы продемонстрировать предупреждение, сгенерированное make:

all: file_abbc

.PHONY: all clean

clean:
    del /Q file_*

file_abbc: file_ab file_bc
    copy file_ab+file_bc file_abbc

file_ab file_bc &: file_a file_b file_c
    copy file_a+file_b file_ab
    copy file_b+file_c file_bc

file_a file_b file_c &: content
    copy content file_a
    copy content file_b
    copy content file_c

Предупреждения от запуска make на Windows на приведенном выше:

Makefile: 17: предупреждение: переопределение рецепта для цели '&'

Makefile: 13: предупреждение: игнорирование старого рецепта для цели '&'

Почему make жалуется на цель '&'?

1 Ответ

2 голосов
/ 14 февраля 2020

Вы используете старую версию GNU make, которая не понимает &: правил, поэтому просто обрабатывает & как имя файла. Используйте make --version, чтобы увидеть, какую версию вы используете, и обновить ее, если она старше, чем 4.3

.
...