了解make / makefile中自动变量的作用

时间:2016-10-11 11:43:44

标签: linux macos shell unix makefile

我最近开始学习make / makefiles及其相关概念。到目前为止,我已经创建了一些基本版本,包括目标,依赖项,操作等。但是,我无法理解自动变量在此上下文中的含义,实用程序或如何使用他们。

我已就此主题做了大量研究。但是,我还没能找到任何令人满意的材料。似乎最有信誉的信息来源是以下GNU页面:https://www.gnu.org/software/make/manual/make.html#Automatic-Variables。 但是,我仍然不明白究竟什么是自动变量,它们的实用程序是什么,或者我如何在我的makefile中实际使用它们。

如果有人可以解释它们是什么,它们的实用性是什么,以及我如何实际使用它们,我将不胜感激。一个例子有助于说明这些想法。谢谢。

1 个答案:

答案 0 :(得分:3)

自动变量只是由Make生成值的变量,而不是必须明确设置。

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

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

这是一个模式规则,用于构建名为<something>.o的文件,该文件取决于<something.c>,使用命令gcc -c -o $@ $<$@是一个自动变量,其值为规则的目标,而$<是一个自动变量,其值为规则的第一个先决条件。这些自动变量对于这种模式规则至关重要;它们允许您运行make foo.omake bar.o并将相应的值替换为命令行。例如,如果您键入make foo.o,Make将尝试运行:

gcc -c -o foo.o foo.c

或者从the git Makefile

考虑这个例子
strip: $(PROGRAMS) git$X
    $(STRIP) $(STRIP_OPTS) $^

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

这有帮助吗?