Make

Makefile循環遍歷目錄

  • October 27, 2022

我需要為 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使用 dirs 及其相對路徑(例如./topdir/dir1)正確分配。

我只需要沒有路徑的目錄名。這是basename應該做的。

但 DIR 始終為空。為什麼?

$(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

引用自:https://unix.stackexchange.com/questions/722610