2009-07-07

Квотирование пробела и запятой в make

Нашёл решение "неудобной" задачи.

Не очень красивое - но работает. Лучше чем вот так напрягать sed через шелл:
var2=`echo $(var) | sed s/\ /,/g`

Нужно в Makefile заменить в переменной все пробелы запятыми. Если бы меняли все двоеточия на точки с запятой - проблем никаких:
$(subst :,;,$(var))

А нужная нам конструкция явно не работает:
$(subst ,,,$(var))

Решение - сделать переменные содержащие пробел и запятую. Более того - переменные можно сделать с "говорящими" именами: $(,) и $( ). На самом деле можно их использовать как "$ " и "$," - без кавычек :) Вот "код":

, := ,
space :=
space +=
$(space) :=
$(space) +=

После него работает, например, такой вызов:
$(subst $ ,$(,),$(var))

Комментариев нет: