2017-03-02 94 views
1

问题是,furl未从file变量中获得赋值。如果我使用纯文本而不是$$file,它可以工作。我不知道为什么这不起作用。Makefile目标:无法从循环中分配变量

的Makefile:

test: 
    @for file in $(shell pwd)/demo/*; do \ 
     $(eval furl := $(shell echo $$file)) \ 
     echo $(furl); \ 
    done 

Im相当肯定这应该是很容易解决,但我无法找到一个解决方案。有任何想法吗?

我使用最新的lubuntu操作系统。

回答

2

问题是$file只存在于执行for循环的shell中,因此make看不到变量。

如何解决这个问题取决于你真正想做什么。

+0

感谢您的回复。我需要使用文件名和文件目录进行进一步的操作。主要任务是只提取没有外部文件名的文件名并将其打印到屏幕上。我需要做进一步的操作,比如根据文件名和目录创建新文件。理想情况下,我会使用'$ file_name_no_ext'和'$ file_dir'变量 –

+0

起初我尝试使用简单的'$(furl)= $$ file;'赋值。它实际上赋值给变量,但是我得到''/ bin/sh:3:=:not found' –

+0

你可以在没有'make'设施的情况下做到这一点,例如。 'base = \'basename $$ file''(我建议在一个单独的shell脚本中执行以避免'$$'和'\\ n'转义)。 –

2

你在配方中弄糟了shell和Make变量。我认为furl应该是shell变量。类似这样的:

test:; @for file in demo/*; do \ 
     furl="`echo $$file`"; \ 
     echo "$$furl"; \ 
     done 

一般来说,你不应该在食谱中分配Make变量。明显的例外是$(foreach)