Makefile循环文件夹并动态获取名称

问题描述 投票:0回答:1

我的projects包含根项目下的makefile

喜欢

project
 -Folder1
 -Folder2
 -app1
 -service1
 -Makefile

现在我想在文件夹中的makefile循环内(在根目录下,即在project下)并打印文件夹名称,这里的文件夹可以从projectX更改为projectN的棘手部分,是否可能?

linux unix makefile gnu-make gnu
1个回答
1
投票

像这样的东西?

$ tree -F    
.
|-- Folder1/
|-- Folder2/
|-- Makefile
|-- app1
`-- service1

2 directories, 3 files

$ cat Makefile
DIRS     := $(notdir $(shell find . -mindepth 1 -maxdepth 1 -type d))
DIRNAMES := $(addprefix print-folder-name-,$(DIRS))

.PHONY: $(DIRNAMES) print-folder-names

print-folder-names: $(DIRNAMES)

$(DIRNAMES): print-folder-name-%:
    @printf '%s\n' '$*'

$ make print-folder-names
Folder2
Folder1

一切都很简单易懂。唯一的微妙之处可能是static pattern rule $(DIRNAMES): print-folder-name-%:。它相当于每个文件夹一个规则:

print-folder-name-Folder1:
    @printf '%s\n' 'Folder1'

print-folder-name-Folder2:
    @printf '%s\n' 'Folder2'

当然,在同一规则中,你可以为每个文件夹做任何你喜欢的事情(除了打印它的名字);只是调整配方。 $*自动变量扩展为模式的主干(在本例中为文件夹名称)。

编辑:如果您还想为某些文件夹打印特殊内容,您还可以使用特定于目标的make变量:

$ cat Makefile
...
print-folder-name-Folder2: SOMEMORETEXT := ' foo'

$(DIRNAMES): print-folder-name-%:
    @printf '%s%s\n' '$*' $(SOMEMORETEXT)

$ make print-folder-names
Folder2 foo
Folder1
© www.soinside.com 2019 - 2024. All rights reserved.