我需要在 Makefile 中创建多个目录的链接。
链接(对于 中的所有文件./topdir/
)应从./anotherdir/<file>
到./topdir/<file>
。
我试过:
create-links: ./topdir/*/
@for f in $^; do \
echo "this is my path: [$${f}]" && \
DIR=$(shell basename $${f}) && \
echo "make link from ./anotherdir/$(DIR)" ;\
done
./topdir 中有这些文件
dir1
dir2
file1
file2
f
正确分配两个目录及其相对路径(例如./topdir/dir1
)。
我只需要目录名,不需要路径。这是basename
应该做的。
但 DIR 始终为空。为什么?
答案1
$(shell basename $${f})
在运行配方之前由 Make 处理;它不在循环中处理。您需要使用 shell 运行所有内容:
@for f in $^; do \
echo "this is my path: [$${f}]" && \
DIR=$$(basename $${f}) && \
echo "make link from ./anotherdir/$(DIR)" ;\
done
或者
@for f in $^; do \
echo "this is my path: [$${f}]" && \
DIR=$${f##*/} && \
echo "make link from ./anotherdir/$(DIR)" ;\
done