【发布时间】:2021-02-19 04:24:25
【问题描述】:
我对 GNU Make 的通配符函数在模式和输出中终止斜杠的行为有一些问题。
考虑以下简单的目录结构:
dir
|
+-- file
|
+-- subdir
在 Linux 上,
$(wildcard dir/*/) # (1)
使用 GNU Make 4.1 评估
dir/subdir/ dir/file
但使用 GNU Make 4.3 到
dir/subdir/
有人可能会争论在前一种情况下包含常规文件file是错误还是功能(目录名称而不是常规文件的名称以斜杠结尾)。但是,这两个版本的 GNU Make 都会评估
$(wildcard $(addsuffix /,$(wildcard dir/*))) # (2)
到
dir/file dir/subdir/
(有待排序)。特别是,$(wildcard dir/file/) 的计算结果为 dir/file。这更符合上述 GNU Make 4.1 特性的精神,但似乎与 GNU Make 4.3 有点不一致。
关于模式中的终止斜杠,我可以从通配符函数中假设什么?
我想确定一个目录的内容,以便子目录的名称以斜杠结尾,而常规文件的名称则不是。在 GNU Make 4.1 中,我使用了方法 1,它破坏了我的 GNU Make 4.3 构建。在这两种情况下,我都可以使用方法 2。但这可行还是我在这里依赖未定义的行为?如果是这样,做我想做的事情的正确(和有效)方法是什么?
【问题讨论】: