Make 中的自动变量

2025-06-06  本文已影响0人  GTMYang

在 Makefile 中,$@$< 等是自动变量(Automatic Variables),用于简化规则编写。以下是常用符号参数的说明:


1. 常用自动变量

变量 含义 示例(规则中)
$@ 当前规则的目标文件名 foo.o: foo.c$@ = foo.o
$< 第一个依赖文件名 foo.o: foo.c bar.h$< = foo.c
$^ 所有依赖文件列表(去重) foo.o: foo.c bar.h$^ = foo.c bar.h
$+ 所有依赖文件列表(不去重) 若依赖重复出现(如 foo.o: foo.c foo.c),则保留重复
$? 比目标更新的依赖文件列表 仅列出已修改且目标需要重新构建的依赖
$* 匹配通配符 % 的部分(茎) %.o: %.c$* = 文件名(不含扩展名)

2. 其他常用符号

符号 含义
$(VAR) 引用变量 VAR 的值
${VAR} 同上,兼容不同语法
$$ 转义为单个 $(用于 Shell 脚本)
# Makefile 中的注释符号
% 通配符(模式规则)
* / ? 文件名通配符(类似 Shell)

3. 示例

# 编译所有 .c 文件为 .o 文件
%.o: %.c
    gcc -c $< -o $@  # $< = %.c, $@ = %.o

# 链接目标文件
app: main.o utils.o
    gcc $^ -o $@     # $^ = main.o utils.o, $@ = app

# 仅处理已修改的依赖
update: lib.a
    cp $? /backup    # $? = 仅更新的文件

4. 注意事项

  1. 大小写敏感:自动变量必须用 $ 开头,且为小写(如 $@ 正确,$@ 错误)。
  2. 特殊字符转义:在 Shell 命令中使用 $ 需写为 $$(例如 echo $$PID)。
  3. 模式规则% 是通配符,$* 是其匹配的部分。

掌握这些符号能大幅提升 Makefile 的编写效率!

上一篇 下一篇

猜你喜欢

热点阅读