$(eval)
будет интерпретироваться до фактического вызова функции bash. Вы не можете обновить make
переменные из bash - это нисходящий процесс.
Однако код, который вы пытаетесь запустить, довольно просто заменить на собственный синтаксис, то есть:
$ cat Makefile
C_D_FLAGS :=
gui: C_D_FLAGS += -D/test -D/TEST
gui:
@echo "C_D_FLAGS: $(C_D_FLAGS)"
$ make gui
C_D_FLAGS: -D/test -D/TEST
Если флаги предоставлены откуда-то, их также можно отфильтровать, например:
$ cat Makefile
C_D_FLAGS :=
gui: C_D_FLAGS += $(filter -D%,$(EXTRA_FLAGS))
gui:
@echo "C_D_FLAGS: $(C_D_FLAGS)"
$ make gui
C_D_FLAGS:
$ make gui EXTRA_FLAGS="-Isomething -DFOO -m32"
C_D_FLAGS: -DFOO