Рассмотрим следующий make-файл:
# various settings, lots of them
# (supposed to be in defaults.mk)
option1="glob_val1"
option2="glob_val2"
#option3="glob_val3" # uncomment and it will override target-specific in sub-make
option4="glob_val4"
# goal is to make many items with various options
# which share common setup, but change in details.
all: item1 item2
# Item 1 is common + changed option3
item1: export option3="i1_val3"
item1:
@echo "start item1:option3=$(option3)"
$(MAKE) generic_item
@echo "done item1"
# Item 2 is common + another option3
item2: export option3="i2_val3"
item2:
@echo "start item2: option3=$(option3)"
$(MAKE) generic_item
@echo "done item2"
# This is generic item that does everything
# basing on options settings
generic_item:
@echo "do generic option3=$(option3) [expecting i<X>_val3 here]"
Я хочу переопределить любой из параметров в target и
затем вызовите универсальную подпрограмму в 'generic_item'.
Проблема в том, что если опция 3 определена поверх файла Makefile,
оно передается без изменений в суб-марку. Если опция 3 сверху прокомментирована
тогда все работает как положено:
start item1:option3=i1_val3
make generic_item
make[1]: Entering directory `/tmp/make_items'
do generic option3=i1_val3 [expecting i<X>_val3 here]
make[1]: Leaving directory `/tmp/make_items'
done item1
start item2: option3=i2_val3
make generic_item
make[1]: Entering directory `/tmp/make_items'
do generic option3=i2_val3 [expecting i<X>_val3 here]
make[1]: Leaving directory `/tmp/make_items'
done item2
Я не хочу использовать $ (MAKE) option1 = ... option2 = ... generic_item
синтаксис, так как он не выглядит хорошо, и может быть много вариантов
с длинными значениями, и все это войдет в журнал и не выглядит хорошо.
Цель состоит в том, чтобы иметь одну общую цель, которая делает вещи, основываясь на ценностях
опций (их много) и возможность расширять их дополнительными
цели, которые должны только переопределить определенные значения / добавить новые действия
и оставь покой общей цели.
Пожалуйста, предложите другой подход, если я выгляжу неправильно.