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
,所以这就是结果。
我试图获取 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
,所以这就是结果。