Если вы используете GNU Make, вы можете просто передать -D BASE_FILE_NAME = \ "$ *. C \" на этапе предварительной обработки (если вы делаете это отдельно, или на этапе компиляции, если на одном этапе). , что является нормой).
Это зависит от того, как вы определили имена файлов. Мои приходят из списка простых имен файлов и имеют префиксы с каталогами, использующие функции в make-файле на более позднем этапе.
IE, это хорошо работает для меня, но ваш пробег может отличаться! : -)
Упрощенная версия моего кода "make":
CLASSES = main.c init.c
PREPROCESSED = $(patsubst %.c,$(PPCDIR)/%.pp.c,$(CLASSES))
$(PREPROCESSED): $(PPCDIR)/%.pp.c: %.c $(ALLH)
$(GCC) $(GCCOPTS) -D BASE_FILE_NAME=\"$*\" -E $< > $@
Просто используйте BASE_FILE_NAME в своем коде, как вам нравится: -)