首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >makefile中多行反斜杠和多行无反斜杠菜谱的区别

makefile中多行反斜杠和多行无反斜杠菜谱的区别
EN

Stack Overflow用户
提问于 2014-12-19 04:34:15
回答 2查看 717关注 0票数 5

在makefile中,

代码语言:javascript
复制
targets : prerequisites
        recipe command \
        recipe command \
        ...

代码语言:javascript
复制
targets : prerequisites
        recipe command
        recipe-command
        ...
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-12-19 04:38:57

来自GNU手册的5.3配方执行部分:

当执行菜谱以更新目标时,将通过为菜谱的每一行调用一个新的子Shell来执行它们,除非.ONESHELL特殊目标生效(请参见使用一个Shell) (实际上,make可能采用不影响结果的快捷方式)。 请注意:这意味着设置shell变量和调用shell命令(如为每个进程设置本地上下文的cd )不会影响接收程序中的下列行。2如果要使用cd来影响下一条语句,请将这两条语句放在一条菜谱行中。然后make将调用一个shell来运行整个行,shell将按顺序执行这些语句。例如: foo : bar/lose $(@D) && gobble $(@F) > ../$@ 在这里,我们使用shell和操作符(&&),这样如果cd命令失败,脚本就会失败,而不会试图在错误的目录中调用gobble命令,这可能会导致问题(在这种情况下,它肯定会导致../foo被截断)。

反斜杠用于将命令拆分为多行。如手册5.1配方语法部分所详细说明的那样。

make解释菜谱的少数几种方法之一是在换行符前检查反斜杠。与普通makefile语法一样,通过在每个换行符前面放置反斜杠,可以将单个逻辑配方行拆分为makefile中的多个物理行。像这样的一系列行被认为是一个单独的菜谱行,将调用shell的一个实例来运行它。

票数 2
EN

Stack Overflow用户

发布于 2014-12-19 04:36:30

当通过用反斜杠转义换行符连接多行时,它们都将在同一个shell中运行。如果使用shell变量,这可能很重要。当每个命令出现在自己的行中时,它们都将在一个新的shell中运行。

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

https://stackoverflow.com/questions/27559778

复制
相关文章

相似问题

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