linux - Makefile 在文件夹上循环并动态获取名称

标签 linux unix makefile gnu-make gnu

我有 projects,其中包含根项目下的 makefile

喜欢

project
 -Folder1
 -Folder2
 -app1
 -service1
 -Makefile

现在我想在文件夹的 makefile 循环中(在根下。即在 project 下)并打印文件夹 name,这里棘手的部分是文件夹可以从 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-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

关于linux - Makefile 在文件夹上循环并动态获取名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52288703/

相关文章:

linux - 语法错误:Bad for loop variable

python - 如何使用 pexpect 从后台进程发送信号

python - 使用 Python API 为 C 项目安装脚本

makefile - 我的 Makefile 中有硬编码路径 - 如何使用 ocamlfind 消除这些路径? (或如何改用 ocamlbuild 或 omake)

linux - Git fatal error : cannot simplify commit

linux - rsync:如何向远程端验证用户身份

node.js - 如何在没有 sudo 的情况下修复 npm 抛出错误

unix - 递归地在名为 string.xml 的文件中搜索某些文本

linux - linux中如何获取一个进程的内存

c - (Game Boy Advance) 程序从 0x00000000 而不是 0x08000000 开始。如何告诉 gcc 编译到特定地址?