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