Дублирование кода в целях makefile, как избежать?
Используйте переменные:PROJECT=ubridge

$(PROJECT)-fb: $(PROJECT)e-CLEAN
  ../../tools/backdoor-bootloader.py -e -w -v $(PROJECT)-firmware.hex

$(PROJECT)-f: $(PROJECT)-CLEAN
 /Applications/ti/Uniflash/flash_cc1310.sh $(PROJECT)-firmware.hex
Как мне избавится от дублирования кода, который одинаковый для нескольких целей, однако, отличается именами файлов(пусть имена файлов совпадают с названием целей)?
Можно написать макрос-генератор целей. Изменяющиеся параметры можно передать как параметры макроса, внутри на них можно ссылаться по номеру. Например так:define generate-targets
$(1): 
 make -j5 TARGET=unwired BOARD=$$(BOARD)/$$(CPU) -f makefiles/Makefile.$$@
 ../bootloader/generate-metadata/generate-metadata $$@.bin 0x0 0x01A00001 1
 srec_cat firmware-metadata.bin -binary $$@.bin -binary -offset 0x100 -o $$@-ota-image.bin -binary
 rm $$@.hex

$(1)-fb: $(1)-CLEAN
  ../../tools/backdoor-bootloader.py -e -w -v $(1)-firmware.hex

$(1)-f: $(1)-CLEAN
 /Applications/ti/Uniflash/flash_cc1310.sh $(1)-firmware.hex 

$(1)-ota: $(1)
 scp $(1)-ota-image.bin root@192.168.20.187:/root/unwired_smarthome

endef
Внутри макроса нужно экранировать $ заменяя его на $$.
Этот макрос можно вызывать в нужном месте следующим образом:$(eval $(call generate-targets,ubrige))
Сгенерированный в этом месте код будет эквивалентен коду из вопроса.