如何在GNUmakefile中操作字符串for循环

时间:2014-03-20 01:47:38

标签: gnu-make

我是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

1 个答案:

答案 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 $@