К вашему сведению: очевидно, что разные версии одной и той же цепочки инструментов в одной и той же системе могут действовать по-разному в этом отношении ...
(Например, может показаться , это будет проблема передачи оболочки, но, очевидно, она не ограничивается только оболочкой).
Здесь мы имеем xc32-gcc 4.8.3 против (avr-) gcc 4.7.2 (и несколько другие)
используя один и тот же makefile и main.c, с той лишь разницей, что 'make CC=xc32-gcc'
и т. д.
CFLAGS += -D'THING="$(THINGDIR)/thing.h"'
использовался на многих версиях gcc (и bash) в течение нескольких лет.
Чтобы сделать это совместимым с xc32-gcc (и в свете другого комментария, утверждающего, что \ "более переносим, чем '"), необходимо сделать следующее:
CFLAGS += -DTHING=\"$(THINGDIR)/thing.h\"
ifeq "$(CC)" "xc32-gcc"
CFLAGS := $(subst \",\\\",$(CFLAGS))
endif
чтобы сделать вещи действительно запутанными при обнаружении этого: очевидно, что не-кавычка -D с // приводит к #define с комментарием в конце ... например
THINGDIR=/thingDir/
-> #define /thingDir//thing.h
-> #define /thingDir
(Спасибо за помощь от ответа s здесь, кстати).