首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Makefile:执行makefile的顺序

Makefile:执行makefile的顺序
EN

Stack Overflow用户
提问于 2016-12-29 13:01:12
回答 1查看 1.1K关注 0票数 3

Makefile:

代码语言:javascript
复制
foo: 
    @echo hello

%: force
    @echo foo

force:
    @echo force

如果我输入‘`make foo',输出是:

代码语言:javascript
复制
force
foo
hello

那么为什么不使用hello呢?

但是,如果我改成这样:

代码语言:javascript
复制
foo: 
    @echo hello

%:
    @echo foo

force:
    @echo force

它只输出hello

EN

回答 1

Stack Overflow用户

发布于 2016-12-29 13:19:38

原因是make必须回溯依赖关系才能使您成为foo

当您键入make foo时,make会认为您是在请求它创建一个名为foo的文件。因此,由于foo不存在(假设),它试图找出如何制作foo。您创建了一个通配符规则,%可以是任何东西,由于没有更好的选项,make将尝试使用此规则来创建foo。现在要创建foo,需要先执行一个依赖项force,然后才能开始创建foo。由于文件force不存在,make确定它需要执行目标来生成force

因此,我们已经到达了在产出方面开始发生事情的地步。force执行回显force,然后执行通配符规则,该通配符规则回显foo最终使其相信它已准备好创建foo,并且该命令仅回显hello

因此,它实际上是逆序的,从最外层的依赖首先到最终目标最后。

当您将force作为通配符规则的依赖项删除时,通配符规则将确定无需执行任何操作来创建强制,因此不会执行其主体(回显foo),但由于hello不存在,它将执行foo目标的主体。

如果您在强制目标(例如touch force)中包含了使文件强制的内容,那么现在您将看到打印的是foohello,而不是force

如果在命令行上传递标志--debug=a (all) to make,就可以看到make所采取的步骤。

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

https://stackoverflow.com/questions/41373392

复制
相关文章

相似问题

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