Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在GNU Make中,函数调用的输出被视为要由shell执行的单独行

在GNU Make中,函数调用的输出被视为要由shell执行的单独行
EN

Stack Overflow用户
提问于 2021-09-02 08:31:12
回答 1查看 21关注 0票数 0

我在GNU Make文件中定义了以下函数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
define comma-seperated
    $(shell printf '$(foreach name,$(1),$(name),)' | head -c -1)
end

你可以这样使用它:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
names := John Paul George Ringo
.PHONY: test
test:
   @echo Hey $(call comma-sepperated, "$(names)")

但它的输出结果是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Hey
"John,Paul,George,Ringo"

并生成错误:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/bin/sh: John,Paul,George,Ringo: command not found
make: *** [Makefile: test] Error 127

为什么函数调用的输出被移到单独的行,为什么shell试图将其作为命令执行?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-09-02 12:24:13

就像我说的,我不能重现这个。此外,您的makefile在逗号后添加了空格,而示例输出中没有这些空格,因此有些地方明显不同。请尽量确保您的问题使用准确的示例代码,并显示准确的输出。

但是,允许define变量包含换行符,如果包含换行符,这些换行符将被保留,并在展开该变量的任何配方中解释为换行符。例如,您可以在define中创建包括多行的整个配方,然后在规则中使用它,它将按预期工作。所以,我怀疑在你的真实版本中,在扩展中有一个初始换行符。

我看不出有什么好的理由去使用这么复杂的方法:一个很难理解的call、shell、printf、head等的组合。在make中做所有这些事情要简单得多。

这里有一种方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
EMPTY :=
SPACE := $(EMPTY) $(EMPTY)
COMMA := ,

comma-separated = $(subst $(SPACE),$(COMMA),$(strip $(1)))

names := John Paul George Ringo
.PHONY: test
test:
        @echo Hey $(call comma-separated,$(names))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69034031

复制
相关文章
MySql中的longtext字段的返回问题「建议收藏」
最近开发中用到了longtext这种字段。在mysql中该字段的最大长度为4G 如下图所示
全栈程序员站长
2022/08/28
1.7K0
MySql中的longtext字段的返回问题「建议收藏」
在Oracle中创建自动增长字段
Oracle在创建表时和其他的数据库有点不一样,MySQL中可以使用“auto_increment”即可。但是Oracle有点麻烦,需要使用序列和触发器达到目的。
星哥玩云
2022/08/17
3K0
在Oracle中创建自动增长字段
在 WordPress 中如何定义字段依赖显示
WPJAM Basic 插件作为我们「WordPree果酱」团队所有插件和项目的基础,其中表单字段的渲染就是其中最重要的一个能力,我们做到了只需配置就能使用,无需额外增加页面的 JavaScript 的交互代码。
Denis
2023/04/13
8.5K0
修改ES返回字段方式提升性能
最近我们在公司内尝试用ES替换老旧的Solr, 在性能对比测试的环节, 发现ES竟然比Solr慢了非常多, 响应时间是Solr的两三倍, 然后开始各种排查, 最后发现ES的响应时间竟然随着request.size的增加呈线性增加, 这说明大部分时间都耗在了获取返回字段上面. 而我们目前在召回时并未获取很多字段, 只获取了UID(我们自己定义的一个基于docvalues列存的字段)和score. 按照ES的query-then-fetch召回模式来说, score应该是在query阶段生成, 在fetch阶段应该只需要读取UID, 而UID是基于列存的, 没有理由会随着request.size的增加而线性增长.
叫我家宝
2022/04/06
3K0
【说站】splitlines在python中返回列表
2、返回一个是否包含换行符的列表,如果参数keepends为False,则不包含换行符。
很酷的站长
2022/11/23
2.4K0
区块链在信用租赁市场的应用实践
本文内容来自TechDay京东技术节,ZRobot区块链产品经理丁文彬在区块链技术与应用专题中的演讲。
京东技术
2019/01/23
1.6K0
捷信达租赁系统,修改租赁状态
/****** Script for SelectTopNRows command from SSMS ******/ SELECT * FROM [gsticket].[dbo].[gstkConsume] where consumeno ='SC190106113625000024' and rentstatus ='0' UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值 update [gsticket].[dbo].[gstkConsume] SET rentstat
landv
2019/03/04
7050
DTO返回JSON时,不展示某字段;DTO返回JSON时,更改某展示字段的key
//DTO返回JSON时,不展示某字段 @JsonIgnore private String addresses; //DTO返回JSON时,更改某展示字段的key @JsonProperty(value = "addresses") public final CalendarVideoAddressDTO getAddressesJSON() { if (addresses != null) { return JSONObject.pars
qubianzhong
2019/04/22
2.3K0
在mysql中如何修改字段类型_MySQL怎么修改字段类型?「建议收藏」
在MySQL中,可以通过alter table语句来修改表中一个字段的数据类型。下面本篇文章就来带大家了解一下alter table语句,介绍如何修改字段类型,希望对大家有所帮助。
全栈程序员站长
2022/09/05
28.1K0
sql中使用CASE返回多个字段
SELECT 表名称.*,CASE WHEN ujz.字段名=1 THEN (SELECT concat(jk.字段名,',',jk.字段名) from a表名称 jk WHERE ujz.字段名=jk.字段名) WHEN ujz.字段名=9 THEN (SELECT concat(jk.字段名,',',jk.字段名) from b表名称 jk WHERE ujz.字段名=jk.字段名) WHEN ujz.字段名=7 THEN (SELECT concat(jk.字段名,',',jk.字段
高大北
2022/06/14
2.3K0
sql中使用CASE返回多个字段
@JsonView注解如何优雅的忽略字段返回
哈喽,好久不更新今天跑来更新了,这段时间换了新公司,有点小忙,废话就不多说了,我们直接开始正题吧。
一个程序员的成长
2020/11/25
1.8K0
@JsonView注解如何优雅的忽略字段返回
SAP MIGO 报错-在例程WERT_SIMULIEREN字段NEUER_PREIS中字段溢出-
SAP MIGO 报错-在例程WERT_SIMULIEREN字段NEUER_PREIS中字段溢出-
SAP虾客
2021/02/23
1.6K0
MongoDB(13)- 查询操作返回指定的字段
答案是不能的,如果想指定 <projection> 是包含字段,那所有字段值都得统一是 1,相反如果是不包含,也必须都是 0
小菠萝测试笔记
2021/06/10
6.5K0
R中字段抽取、字段合并、字段匹配
1、字段抽取 字段抽取,是根据已知列数据的开始和结束位置,抽取出新的列 字段截取函数:substr(x,start,stop) tel <- '18922254812'; #运营商 band <- substr(tel, 1, 3) #地区 area <- substr(tel, 4, 7) #号码段 num <- substr(tel, 8, 11) tels <- read.csv('1.csv'); #运营商 bands <- substr(tels[,1], 1, 3) #地区 areas <-
Erin
2018/01/09
5.4K0
设备租赁管理系统|租赁设备行业解决方案
设备租赁业务加快商品流通、扩大内需、促进技术更新、缓解中小企业融资困难、是现代化大生产条件下产生的实物信用与企业信用相结合的金融服务形式,助于设备制造企业转变营运模式,从卖转租,租赁设备的种类和数量也越来越多,设备租赁后,需要有一套远程管理平台, 实现设备的统一的管理和服务。主要包括:
用户6789871
2019/11/29
2.1K0
在vue中如何监听移动端的返回键
环境:vue.js+vant 问题:首页列表和分类页的列表用的同一个页面,页面区分用的是本地缓存,希望在分类页点击返回的时候,执行清除缓存,刷新页面 解决原理:利用history和浏览器刷新popstate状态去实现 每一次返回都会去历史记录回退 -1 所以就在进入页面之前 往历史记录里面多记录一次当前页面的链接。然后再回退的时候监听刷新,去做一些事情。 具体执行: 1、挂载完成后,判断浏览器是否支持popstate
IT工作者
2022/03/14
3.6K0
在PHP中 为什么in_array(0, ['a', 'b', 'c'])返回true
直观上看,0没有在数组['a', 'b', 'c']中,也不会等于abc这个字符串。
用户9076598
2022/03/02
2.8K0
AOP – 给返回值追加注释字段
本篇教程没有实际生产意义,进作为学习、复习、研究AOP使用 本教程是在还原京东架构字典注解的方式之一的初级DEMO,生产使用需要额外拓展使用。
收心
2023/06/07
6150
点击加载更多

相似问题

OperationalError /管理/租赁/租赁/

34

Django Rest框架与Mozilla Django OCID

17

在laravel 5中的租赁申请?

12

在Salesforce实行多重租赁

13

C中的视频租赁

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文