Я пытаюсь сделать что-то, что, по-моему, невозможно сделать. У меня есть общая цель, которая может иметь несколько предварительных условий, например postbuild_% в этом примере
TARGET_NAMES = release.target.1.1 debug.target.1.1 release.target.2.4 debug.target.2.4
BUILD_TARGET := $(addprefix build_,$(TARGET_NAMES))
.PHONY: $(BUILD_TARGET)
$(BUILD_TARGET): build_%: prebuild_% % postbuild_%
Я использую определение переменной (экспортируемой другим make-файлом, который вызывает файл с правилами) для каждой цели, чтобы определить определенное поведение компиляции. Поскольку каждое имя цели отличается (за исключением выпуска / отладки), я использую разные переменные для каждого. Например,
.PHONY: %.target.1.1
%.target.1.1:
ifndef NO_target.1.1
[something specific for %.target.1.1]
else
@echo nothing to do
endif
Теперь моя проблема в том, что даже в postbuild_% мне приходится повторять эту вещь, но рецепт всегда одинаков для каждой цели, поэтому я пытаюсь найти способ использовать вычисленный переменные для воссоздания переменной «NO _ $ *», чтобы не повторять весь рецепт, как это
POSTBUILD_TARGET := $(addprefix postbuild_,$(TARGET_NAMES))
.PHONY: $(POSTBUILD_TARGET)
$(POSTBUILD_TARGET): postbuild_%:
ifndef $(addprefix NO_,$(subst $(whitespace),.,$(wordlist 2,4,$(subst ., ,$*))))
[...]
else
@echo Skipping $@
endif
Что-то в этом явно не работает: что я делаю не так?
Спасибо за вашу помощь :)