GNU Make: Как добавить опцию перед каждой записью в списке

У меня есть проблема, где я хочу создать переменную, которая выглядит так,

INCDIRS = -I dir0 -I dir1 -Idir2 -I dir3 ... -I dirN

где dir1, …, dirN являются именами всех подкаталогов некоторого базового каталога, base_dir.

Как бы я пошел на создание этой переменной? Первоначально я думал, что мог бы сделать следующее,

INCDIRS = $(shell for x in `find base_dir -type -d -print`; do echo -I $x; done;)

но это только приводит к

INCDIRS = -I -I -I -I ... -I

Если бы кто-нибудь мог объяснить, как это сделать, или объяснить, почему моя оригинальная команда получила вывод, который она сделала, я был бы очень признателен. Спасибо!

1

Решение

У вас есть две ошибки в вашем INCDIRS назначение. Один в find команда. Так должно быть find -type d -print (или просто find -type d; -print здесь лишнее). Другая ошибка использования $x, Вам нужно сбежать $ с другим $:

INCDIRS = $(shell for x in `find base_dir -type d -print`; do echo -I $$x; done;)
2

Другие решения

Вы можете сначала получить список каталогов, а затем добавить -I перед каждым:

SOURCE_DIRS := $(shell find base_dir -type d -print)
INCDIRS      = $(addprefix -I,$(SOURCE_DIRS))

что может быть лучше, если вам нужен $ (SOURCE_DIRS) для чего-то еще.

2

По вопросам рекламы [email protected]