У меня есть проблема, где я хочу создать переменную, которая выглядит так,
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
Если бы кто-нибудь мог объяснить, как это сделать, или объяснить, почему моя оригинальная команда получила вывод, который она сделала, я был бы очень признателен. Спасибо!
У вас есть две ошибки в вашем 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;)
Вы можете сначала получить список каталогов, а затем добавить -I перед каждым:
SOURCE_DIRS := $(shell find base_dir -type d -print)
INCDIRS = $(addprefix -I,$(SOURCE_DIRS))
что может быть лучше, если вам нужен $ (SOURCE_DIRS) для чего-то еще.