【问题标题】:Understanding the role of automatic variables in make/makefile了解自动变量在make/makefile中的作用
【发布时间】:2017-02-19 22:48:22
【问题描述】:

我最近开始学习 make/makefile 及其一些相关概念。到目前为止,我已经创建了一些基本版本,包括目标、依赖项、操作等。但是,我无法理解在这种情况下 自动变量 是什么、它们的实用性或如何使用他们。

我对这个话题做了很多研究。但是,我还没有找到任何令人满意的材料。似乎最有信誉的信息来源是this GNU page。但是,我仍然不明白什么是自动变量,它们的实用性是什么,或者我如何在我的 makefile 中实际使用它们。

我很想知道它们是什么,它们的用途是什么,以及我如何实际使用它们。

【问题讨论】:

  • 尝试将您的问题编辑得更具体、更简洁。我认为您至少有三个问题,每个问题都非常广泛。
  • @Jerry 我只想解释一下它们是什么,它们的用途是什么,以及我如何实际使用它们。一个例子将有助于说明这些想法。我不是在寻找高度精致的东西。我只是这个概念的新手,正在寻求澄清。
  • 我用我在上面评论中所说的内容编辑了 OP。希望这将提供澄清和特异性。

标签: linux macos shell unix makefile


【解决方案1】:

自动变量是 Make 为其生成值的简单变量,而不必显式设置。

如果您查看现有的 Makefile(选择您最喜欢的开源项目!),您会发现很多实用示例可以帮助您。一个常见的看起来像这样:

%.o: %.c
    gcc -c -o $@ $<

这是一个模式规则,它说“要构建一个名为 &lt;something&gt;.o 的文件,它依赖于 &lt;something.c&gt;,请使用命令 gcc -c -o $@ $&lt;。$@ 是一个自动变量,用于计算规则的目标, $&lt; 是一个自动变量,它评估规则的第一个先决条件。这些自动变量对这种模式规则至关重要;它们允许您运行 make foo.o 或 make bar.o 并将适当的值替换为命令行。例如,如果您输入make foo.o,Make 将尝试运行:

gcc -c -o foo.o foo.c

或者考虑the git Makefile的这个例子:

strip: $(PROGRAMS) git$X
    $(STRIP) $(STRIP_OPTS) $^

这用于从目标文件中去除符号信息。它需要对所有先决条件进行操作,因此它使用$^,其计算结果为...所有先决条件的空格分隔列表。

【讨论】:

    猜你喜欢
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多