Объединение элементов списка в GNU Make
В моем make файле у меня есть переменная со списком каталогов, например:
DIRS = /usr /usr/share/ /lib
Теперь мне нужно создать из него переменную PATH, которая в основном такая же, но использует точку с запятой как разделитель:
PATH = /usr:/usr/share/:/lib
Как мне это сделать? Я имею в виду, как мне присоединиться к элементам списка DIRS с точкой с запятой, а не пробелами?
Ответы
Ответ 1
Вы можете использовать команду $(subst)
в сочетании с небольшим трюком, чтобы получить переменную, которая имеет значение одного пробела:
p = /usr /usr/share /lib
noop=
space = $(noop) $(noop)
all:
@echo $(subst $(space),:,$(p))
Надеюсь, что это поможет,
Эрик Мельский
Ответ 2
Самая чистая форма (которую я могу найти):
classpathify = $(subst $(eval) ,:,$(wildcard $1))
cp = a b c d/*.jar
target:
echo $(call classpathify,$(cp))
# prints a:b:c:d/1.jar:d/2.jar
Примечания:
- Включение его в псевдофункцию делает намерение более ясным, чем создание связки линейных манипуляций строк inline.
- Я включил функцию $(wildcard), потому что вы почти всегда используете эти два вместе при указании пути к классам
- Не забудьте добавить лишние пробелы после запятых или вы получите что-то вроде ":: a: b: c: d: e".