Makefile 循环遍历目录

Makefile 循环遍历目录

我需要在 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

相关内容