добрый день
имеем
- makefile for avr-gcc
- avrdude
- несколько целей для прошивки (разные программаторы; разные параметры, разные по кол-ву и настройкам)
задача: настроить так, что бы при вызове цели flash - отрабатывала дефолтная цель для дудки (flash_usbasp,flash_ispmkii,flash_109), которая настраивается в начале makefile
ну, и, соотв., отрабатывали все остальные «конкретные» цели (flash_usbasp,flash_ispmkii,flash_109)
выкрутился рекурсивными вызовом этого-же makefile
FLASH_NAME ?= usbasp ###!!! дефолтный программатор
FLASH_DEV ?= usb
flash_usbasp : FLASH_NAME ?= usbasp
flash_usbasp : FLASH_BRATE = 115200
flash_usbasp : FLASH_BCLOCK = 4
flash_usbasp : AVRDUDE_FLAG += -b $(FLASH_BRATE) -B $(FLASH_BCLOCK)
flash_usbasp : flash_cmd
flash_ispmkii : FLASH_NAME = avrispmkII
flash_ispmkii : FLASH_BRATE = 115200
flash_ispmkii : FLASH_BCLOCK = 4
flash_ispmkii : AVRDUDE_FLAG += -b $(FLASH_BRATE) -B $(FLASH_BCLOCK)
flash_ispmkii : flash_cmd
flash_109 : FLASH_NAME = avr109
flash_109 : FLASH_BRATE = 9600
flash_109 : AVRDUDE_FLAG += -b $(FLASH_BRATE)
flash_109 : flash_cmd
###!!!
# рекурсивынй вызов, в зов-ти от цели
###!!!
flash :
ifeq ($(FLASH_NAME),usbasp)
$(MAKE) flash_usbasp
endif
ifeq ($(FLASH_NAME),ispmkii)
$(MAKE) flash_ispmkii
endif
ifeq ($(FLASH_NAME),avr109)
$(MAKE) flash_avr109
endif
flash_cmd: $(TARGET).hex
$(AVRDUDE) -c $(FLASH_NAME) -P $(FLASH_DEV) -F $(AVRDUDE_FLAG) -U flash:w:$(OUTDIR)/$<
вопрос: можно-ли красиво обойтись без рекурсии?
!!! UPDATE !!! решение найдено
FLASH_NAME ?= name1
FLASH_NAME ?= name2
FLASH_NAME ?= name3
...
flash_name1 : FLASH_NAME =
flash_name1 : ARG = ...
flash_name1 : flash
flash_name2 : FLASH_NAME =
flash_name2 : ARG = ...
flash_name2 : flash
flash_name3 : FLASH_NAME =
flash_name3 : ARG = ...
flash_name3 : flash
flash : flash_$(FLASH_NAME)
$(FLASH_CMD)
...
make all - сборка проекта
make flash - прошивка дефолтным свистком (настраивается)
make flash_$NAME - прошивка кастомным свистком