【发布时间】:2021-09-20 05:47:39
【问题描述】:
在 bash 中,我可以使用 src/{foo/{one,two},bar/{three,four}}.o 来描述文件:
src/foo/one.o
src/foo/two.o
src/bar/three.o
src/bar/four.o
我想以类似的方式描述生成文件目标的先决条件。有没有办法在 GNU Make 中实现这一点?
这就是我所拥有的:
SHELL:=/bin/bash
all: src/{foo/{one,two},bar/{three,four}}.o
@echo "$(^)"
我得到:
make: *** No rule to make target 'src/{foo/{one,two},bar/{three,four}}.o', needed by 'all'. Stop.
我遇到了this 和this 建议将SHELL=/usr/bin/bash 添加到makefile 的问题。但我仍然无法让它工作。
谢谢。
【问题讨论】:
-
make 使用自己的语言。这不是贝壳。阅读您的版本的文档,看看是否有可以使用的东西。
-
感谢您让我阅读手册,我怎么没想到?
-
您引用的链接提到将
SHELL=/usr/bin/bash添加到makefile,或通过make SHELL=/bin/bash添加到操作系统级调用;在您的示例中,您在SHELL和=之间添加了一个额外的:;您可以尝试从您的代码中删除:,看看是否有效?显然验证你有正确的路径到你的本地bash,并且验证bash --version返回一个消息它确实是bash不会有什么坏处......“Duh,Mark!” ? -
@markp-fuso,感谢您的投入,感谢您的宝贵时间。 bash 实际上位于 /bin/bash 中。和 := 几乎等同于 =。对于这种情况,没有区别。此外,我想出了一个问题的答案,我只是发布了希望将来其他人发现它有用。
-
@markp-fuso,您的方法似乎比我的方法麻烦得多。但是,我只是将
:=替换为=,并且行为是相同的。我错过了什么吗?
标签: bash makefile brace-expansion