我最近开始学习 make/makefile 及其一些相关概念。到目前为止,我已经创建了一些基本版本,包括目标、依赖项、操作等。但是,我一直无法理解在这种情况下什么是自动变量、它们的效用或如何使用他们。
我对这个主题做了很多研究。但是,我一直找不到任何令人满意的 Material 。似乎最有信誉的信息来源是this GNU page .然而,我仍然不明白什么是自动变量,它们的用途是什么,或者我如何在我的 makefile 中实际使用它们。
我很想知道它们是什么、它们的用途是什么,以及我如何实际使用它们。
最佳答案
自动变量只是简单的变量,其值由 Make 生成,而不必显式设置。
如果您查看现有的 Makefile(选择您最喜欢的开源项目!),您会发现很多实用示例来帮助您解决问题。一个常见的看起来像这样:
%.o: %.c
gcc -c -o $@ $<
这是一个模式规则,表示“要构建一个名为 <something>.o
的文件,该文件依赖于 <something.c>
,请使用命令 gcc -c -o $@ $<
。$@
是一个自动变量,用于计算规则的目标, $<
是一个自动变量,它评估规则的第一个先决条件。这些自动变量对于这种模式规则至关重要;它们允许您运行 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) $^
这用于从目标文件中剥离符号信息。它需要对所有先决条件进行操作,因此它使用 $^
,其计算结果为...所有先决条件的空格分隔列表。
关于linux - 了解自动变量在 make/makefile 中的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976489/