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

标签 linux macos shell unix makefile

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

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

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

最佳答案

自动变量只是简单的变量,其值由 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) $^

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

关于linux - 了解自动变量在 make/makefile 中的作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39976489/

相关文章:

linux - 如何通过 SSH 将 Sudo 与 Jenkins bash 脚本一起使用?

linux - E文本编辑器git开源!!! linux下如何编译?

c - 从命令行检索全局变量值

macos - 在终端获取下个月

bash - awk: next 在函数内是非法的

c++ - 为分布式系统通信设置套接字

macos - 如何在 MAC 上为 Up 创建 ~/.aws/credentials 文件

python - 为 Python 3 mac 安装 PyQt4

python - 如何避免在每次导入后重新启动 python shell

shell - 如何在 Unix 中 grep 包含超过 1 个单词的行