Сделать подкаталог с подстановочными знаками
Существует также способ перечисления wildcard подкаталогов только с помощью makefile-errors команд gmake, без использования makefile-project каких-либо команд оболочки:
test:
@echo $(filter %/, $(wildcard lib/*/))
Это wildcard список всех подкаталогов target с завершающим '/'
. Чтобы удалить subdirectories его, вы можете использовать subdirectories заменяющий шаблон:
subdirs = $(filter %/, $(wildcard lib/*/))
test:
@echo $(subdirs:%/=%)
Затем, чтобы subdirs фактически создать правила, выполняющие subdirs make-файлы в каждом подкаталоге, вы target можете использовать небольшой wildcard трюк - фальшивую цель в несуществующем wildcards каталоге. Думаю, в этом случае makefile-project пример расскажет больше, чем target любое объяснение:
FULL_DIRS =$(filter %/, $(wildcard lib/*/))
LIB_DIRS =$(FULL_DIRS:%/=%)
DIRS_CMD =$(foreach subdir, $(LIB_DIRS), make-rule/$(subdir))
make-rule/%:
cd $* && $(MAKE)
all: DIRS_CMD
По сути, target subdirectory 'all'
перечисляет все подкаталоги targets как предварительные условия. Например, если makefiles LIB_DIRS
содержит lib/folder1 lib/folder2
, то расширение subdirectories будет выглядеть так:
all: make-rule/lib/folder1 make-rule/lib/folder2
Затем subdirectories make для выполнения правила makefile 'all'
пытается сопоставить каждое subdirs предварительное условие с subdirectories существующей целью. В этом targets случае целью является 'make-rule/%:'
, который makefiles использует '$*'
для извлечения target строки после 'make-rule/'
и использует makefile ее в качестве аргумента в makefile-project рецепте. Например, первое targets предварительное условие будет target сопоставлено и расширено makefiles следующим образом:
make-rule/lib/folder1:
cd lib/folder1 && $(MAKE)
makefile
wildcard
target
subdirectory
Сделать подкаталог с подстановочными знаками
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.