我是GNUmakefile的新手,我不知道如何在下面的for循环中处理字符串。我可以使用下面的echo命令打印出每个文件。我的问题是: 1.如何将$$ f分配给变量? 2.如何打印出新变量的内容?
例如,我确实将$$f
的内容分配给“abc”,但echo ${abc};
打印出空白。
我在哪里想念?感谢
DIR := MyDir
CFILES := $(wildcard $(DIR:=/*.c))
.PHONY: all
all:
for f in $(CFILES); \
echo $$f; \
abc=$$f; \
echo ${abc}; \
done
答案 0 :(得分:0)
您的for循环缺少do?
在选项卡式块中,您有脚本。 所以你设置shell变量而不是变量。 您必须在shell块中转义$ s,因此打印$$ abc或$$ {abc}将起作用。您可以像使用$(CFILES)一样使用make var。
您对abc的期望/期望是什么? 你想操纵一个shell还是make var?
echo CFILES=$(CFILES)
for f in $(CFILES); do\
echo ff $$f;\
abc=$$f; \
echo $${abc};\
bn=$$(basename $$f);\
b=$${bn%%.*};\
echo you want this b= stripped down file tag $$b basename of file $$bn bash style;\
done
一如既往,有不止一种做事方式。 制作风格也许你可以使用模式规则和自动变量来做你想做的事情吗?
http://www.gnu.org/software/make/manual/make.html#Automatic-Variables
http://www.gnu.org/software/make/manual/make.html#Pattern-Examples
e.g。
%.o : %.c
echo make var $< matches file.c
echo make var $@ matches file.o
echo make var $* matches stem file
echo $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@