我的projects
包含根项目下的makefile
喜欢
project
-Folder1
-Folder2
-app1
-service1
-Makefile
现在我想在文件夹中的makefile循环内(在根目录下,即在project
下)并打印文件夹名称,这里的文件夹可以从projectX
更改为projectN
的棘手部分,是否可能?
像这样的东西?
$ 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