bash - 如何在 makefile 先决条件中使用大括号扩展?
问题描述
在 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.
我遇到了这个和这个建议添加SHELL=/usr/bin/bash
到makefile中的问题。但我仍然无法让它工作。
谢谢。
解决方案
好的,所以 GNU make 有这个shell
单独的命令在这里并不重要,因为大括号扩展是一个bash的东西,并且 make 使用 Bourne shell (/bin/sh)。但是,连同引用问题的建议,我可以做这样的事情:
SHELL:=/bin/bash
all: $(shell echo src/{foo/{one,two},bar/{three,four}}.o)
@echo "$(^)"
这样,大括号就可以正确展开。
推荐阅读
- php - 定义一个包含文件的目录
- swift - 如何在swift中的@dynamicMemberLookup中为`subscript(dynamicMember:)`声明“抛出”?
- excel - 通过 FIND 返回具有特定句子的 2 行之间的值
- mysql - 设计数据库并使用 mySQL 进行查询 - 不确定我是否正确建模?
- python - 如何从函数中的 pytest 夹具获取返回值,因此我不需要使用附加参数调用此函数?
- node.js - Nodejs unittest 模拟量角器 $ 模块
- doctrine-orm - 在结果中嵌入关系
- sql - 根据条件将正确的值作为一个变量提取
- python - 从字符串 url 打开新选项卡
- ios - Unity3D 导出的源代码:C++ 头文件无法识别