【问题标题】:Makefile DEFAULT_GOAL variable生成文件 DEFAULT_GOAL 变量
【发布时间】:2015-02-03 12:49:24
【问题描述】:

这是一个使用 DEFAULT_GOAL 变量的例子:

ifeq ($(.DEFAULT_GOAL),)
  $(warning no default goal is set)
endif

.PHONY: foo
foo: ; @echo $@

$(warning default goal is $(.DEFAULT_GOAL))

# Reset the default goal.
.DEFAULT_GOAL :=

.PHONY: bar
bar: ; @echo $@

$(warning default goal is $(.DEFAULT_GOAL))

# Set our own.
.DEFAULT_GOAL := foo


The output is:

no default goal is set
default goal is foo
default goal is bar
foo

我坚持理解 echo 和 $(warning ) 函数的流程是什么,即当 $(warning ) 函数被称为 echo $ @ 输出被抑制并显示 echo $@ 的最后输出。因为有 2 echo statement3 $(warning) 函数调用,但 echo 最后一个 foo 只打印了一个目标 id。为什么其他的不打印,为什么最后一个值打印为 foo 为什么不打印 bar?

【问题讨论】:

    标签: linux makefile


    【解决方案1】:

    警告和分配发生在make 读取Makefile 时。只有这样它才开始决定执行哪些规则。其他 echo 语句永远不会执行,因为它只在该点设置默认目标,即 foo

    【讨论】:

    • GNU Make 手册的How make Reads a Makefile 部分在这里有些帮助。
    • @tripleee !感谢您的早期回复我想知道执行哪个 echo $@ 语句将 foo 作为默认目标。提前致谢。
    • $@ 是目标的名称,所以显然是foo。最后的赋值将DEFAULT_GOAL 设置为foo,这就是Make 完成读取文件后的设置。
    • 如果您完全不熟悉 Make 基础知识,您或许应该阅读介绍然后回到这里。
    • 感谢回复!!!先生,我是第一次做 Makefile,所以想清楚地理解一切,所以毫无疑问,这就是为什么我什么都不做。我的问题可能看起来很愚蠢,但是你们给出的答复让我对makefile中的每一点都非常清楚。我被指派为超级计算机上的复杂项目编写 makefile,但我以前没有这样做过,所以我完全是 Makefikes 的新手。所以先生,请不要生气,如果可能的话,请建议一些除 GNU Make 之外的链接。谢谢
    猜你喜欢
    • 1970-01-01
    • 2016-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-07
    • 2013-01-28
    相关资源
    最近更新 更多