我尝试在其他命令中使用ls
的结果(例如,echo,rsync):
all:
<Building, creating some .tgz files - removed for clarity>
FILES = $(shell ls)
echo $(FILES)
但我得到了:
make
FILES = Makefile file1.tgz file2.tgz file3.tgz
make: FILES: No such file or directory
make: *** [all] Error 1
我尝试过使用echo $$FILES
、echo ${FILES}
和echo $(FILES)
,但都没有成功。
发布于 2012-04-10 07:22:03
此外,除了torek的答案之外:有一件事很突出,那就是您使用的是延迟计算的宏赋值。
如果您使用的是GNU Make,请使用:=
赋值而不是=
。此赋值导致右侧立即展开,并存储在left hand变量中。
FILES := $(shell ...) # expand now; FILES is now the result of $(shell ...)
FILES = $(shell ...) # expand later: FILES holds the syntax $(shell ...)
如果使用外壳赋值,这意味着每次出现$(FILES)
都会扩展$(shell ...)
语法,从而调用=
命令。这将使make作业运行速度变慢,甚至会产生一些令人惊讶的后果。
https://stackoverflow.com/questions/10024279
复制相似问题