2016-07-23 272 views
0

我試圖從運行一個來自Makefile規則部分的shell命令。我使用basename命令通過$$file獲取文件名無法提供正確的文件名。任何人,請幫助。在Makefile中執行Shell命令規則

for file in `ls *.fof`; \ 
    do \ 
    $(eval VIP = `basename $$file .fof`) \ 
    echo "filename with ext. is $$file"; \ 
    echo "filename is $(VIP)";\ 
done    

回答

1

雖然你可以得到那裏, 基本名稱(1)很難永遠需要。

  • 在殼中,圖案${file##*/}除去的目錄,並${file%.*}刪除該擴展。作爲內置插件,它們比調用可執行文件更快。

  • 在GNU make中,您有$(notdir $(basename $(file)))。 BSD製作有類似的。

我儘量避免make中的循環。爲了完成你正在做的事情,我可能會做類似於

.SUFFIXES = .fof .T 
NAMES=$(wildcard *.fof) 

all: $(subst .fof,.T,$(NAMES)) 

.fof.T: 
     echo "filename with ext. is $^" 
     echo "filename is $(notdir $(basename([email protected])))" 
0

我可以使它與小的變化工作:在VIP=

all: 
    for file in `ls *.txt`; \ 
     do \ 
     VIP=`basename $$file .txt` ;\ 
     echo "filename with ext. is $$file"; \ 
     echo "filename is $$VIP";\ 
    done 
  1. 變化
  2. 最後回聲使用$$VIP