我正在尝试从Makefile规则部分运行shell命令。我使用basename
命令获取文件名无法通过$$file
提供正确的文件名。有人请,帮忙。
for file in `ls *.fof`; \
do \
$(eval VIP = `basename $$file .fof`) \
echo "filename with ext. is $$file"; \
echo "filename is $(VIP)";\
done
答案 0 :(得分:2)
虽然你可以通过这种方式实现目标,但几乎不需要 basename (1)。
在shell中,模式${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($@)))"
答案 1 :(得分:0)
我可以通过小改动来实现它:
all:
for file in `ls *.txt`; \
do \
VIP=`basename $$file .txt` ;\
echo "filename with ext. is $$file"; \
echo "filename is $$VIP";\
done
VIP=
行$$VIP