Я не думаю, что вы можете изменить переменную в зависимости от цели.Предположим, что вы вызываете
make TARGET1 TARGET2
Какое значение тогда будет иметь CFLAGS
?
В этом случае вы можете использовать не шаблонные правила для различения целей.
TARGET1: a.c
@echo [CC] $< ...
$(CC) -I INCLUDEPATH1 ...
TARGET2: a.c
@echo [CC] $< ...
$(CC) -I INCLUDEPATH2 ...
Чтобы уменьшить количество повторений, вы также можете использовать переменные и « functions ».Затем вы могли бы повторно использовать то, что было бы основой вашего шаблонного правила в других правилах.
define compile_cmd
@echo [CC] $< ...
$(CC) -I $1 -l$2 $(CFLAGS)
endef
TARGET1: a.c
$(call compile_cmd,INCLUDEPATH1,LIB1) -o $@ $<
TARGET2: a.c
$(call compile_cmd,INCLUDEPATH2,LIB2) -o $@ $<
%.o: %.c
$(call compile_cmd,INCLUDEPATH_DEFAULT,LIB_DEFAULT) -o $@ $<
Это позволило бы создать достаточно хороший и гибкий make-файл, соответствующий вашим потребностям.