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

관련 정보