Я бы предложил использовать конфигурационные make-файлы. Например, предположим, у вас есть несколько устройств с его конфигурациями:
config_device1.mk
OPTION1=yes
OPTION2=0
config_device2.mk
OPTION1=no
OPTION2=1
Затем вы можете условно включить их в базовый make-файл, используя специальный параметр, передаваемый из командной строки ( make -f makefile DEVICE = dev_type1 ), использовать параметры из файлов конфигурации и обрабатывать их:
Makefile
ifeq ($(DEVICE),dev_type1)
include $(CONFIG_PATH)/config_device1.mk
endif
ifeq ($(DEVICE),dev_type2)
include $(CONFIG_PATH)/config_device1.mk
endif
ifeq ($(OPTION1),yes)
CFLAGS += -DBUILD_OPTION1
endif
CFLAGS += -DBUILD_OPTION2=$(OPTION2)
Кстати, в долгосрочной перспективе (если у вас нет временных ограничений) лучше использовать некоторые из существующих систем сборки, прочитать ее руководство и придерживаться ее методологии.