Makefile 中的通配符函数输出

wildcard function output in Makefile

我试图获取 ls 的路径只是为了使用 makefile 进行测试。我做了以下事情:

paths = $(addsuffix /ls,$(subst :, ,$(PATH)))
repath = $(wildcard $(paths))
result = $(firstword $(repath))

all : ; @echo "the repath contains $(repath)"
    @echo "the  result contains $(result)"

通配符函数returns仅/bin/ls。这正是我想要的,但我仍然无法理解通配符输出。

我的 PATH 包含以下以冒号分隔的目录(为了便于阅读,此处分成多行):

/usr/local/cuda-6.0/bin
/usr/local/cuda-6.0/bin
/usr/lib64/qt-3.3/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
/usr/sbin
/sbin
/home/betatest/bin

加上后缀后为:

/usr/local/cuda-6.0/bin/ls
/usr/local/cuda-6.0/bin/ls
/usr/lib64/qt-3.3/bin/ls
/usr/local/bin/ls
/usr/bin/ls
/bin/ls
/usr/local/sbin/ls
/usr/sbin/ls
/sbin/ls
/home/betatest/bin/ls

那为什么通配符函数的输出只有/bin/ls

wildcard 函数给出了存在的并与给定模式匹配的事物的列表。在这种情况下,给定的模式是

/usr/local/cuda-6.0/bin/ls /usr/local/cuda-6.0/bin/ls /usr/lib64/qt-3.3/bin/ls /usr/local/bin/ls /usr/bin/ls /bin/ls /usr/local/sbin/ls /usr/sbin/ls /sbin/ls /home/betatest/bin/ls

我怀疑这些文件中唯一实际存在的是 /bin/ls,所以这就是结果。