2016-07-23 273 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