Как исключить несколько файлов в неявном правиле make-файла? - PullRequest
0 голосов
/ 29 сентября 2018

Я создаю несколько «основных» файлов и в настоящее время придерживаюсь следующего неявного правила:

$(PROJECT_ROOT)build/%.bin: $(PROJECT_ROOT)obj/%.o $(DEPS)
    @mkdir -p $(dir $@)
    @g++ -o $@ $^

Теперь мне нужно иметь специальные инструкции по связыванию для некоторых «основных» файлов.Я определил исключения следующим образом:

SPECIAL_TARGET_1 = $(PROJECT_ROOT)build/...
SPECIAL_TARGET_2 = $(PROJECT_ROOT)build/...
SPECIAL_TARGETS = $(SPECIAL_TARGET_1) $(SPECIAL_TARGET_2)

и попытался отфильтровать их следующим образом:

$(filter-out $(SPECIAL_TARGETS), $(PROJECT_ROOT)build/%.bin): $(PROJECT_ROOT)obj/%.o $(DEPS)
    @mkdir -p $(dir $@)
    @g++ -o $@ $^

, но filter-out ничего не фильтрует.

Как правильно исключить несколько файлов из неявного правила?

1 Ответ

0 голосов
/ 29 сентября 2018

Функция filter-out используется для удаления объектов из списка.Но у вас нет списка: у вас есть только одна текстовая строка $(PROJECT_ROOT)build/%.bin.

Если вы добавите новое правило:

$(SPECIAL_TARGETS):
    @echo TODO I need to write some special linking instructions for $@

, тогда это конкретное правило переопределитуниверсальное правило сопоставления с образцом.

...