首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Makefile中使用shell命令

如何在Makefile中使用shell命令
EN

Stack Overflow用户
提问于 2012-04-05 15:25:54
回答 1查看 237.4K关注 0票数 121

我尝试在其他命令中使用ls的结果(例如,echo,rsync):

代码语言:javascript
复制
all:
    <Building, creating some .tgz files - removed for clarity>
    FILES = $(shell ls)
    echo $(FILES)

但我得到了:

代码语言:javascript
复制
make
FILES = Makefile file1.tgz file2.tgz file3.tgz
make: FILES: No such file or directory
make: *** [all] Error 1

我尝试过使用echo $$FILESecho ${FILES}echo $(FILES),但都没有成功。

EN

回答 1

Stack Overflow用户

发布于 2012-04-10 07:22:03

此外,除了torek的答案之外:有一件事很突出,那就是您使用的是延迟计算的宏赋值。

如果您使用的是GNU Make,请使用:=赋值而不是=。此赋值导致右侧立即展开,并存储在left hand变量中。

代码语言:javascript
复制
FILES := $(shell ...)  # expand now; FILES is now the result of $(shell ...)

FILES = $(shell ...)   # expand later: FILES holds the syntax $(shell ...)

如果使用外壳赋值,这意味着每次出现$(FILES)都会扩展$(shell ...)语法,从而调用=命令。这将使make作业运行速度变慢,甚至会产生一些令人惊讶的后果。

票数 62
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10024279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档