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によって処理され、ループでは処理されません。すべてを実行するにはシェルを使用する必要があります。

    @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

関連情報