变量
- 定义:
变量名=值
- 使用:
$(变量名)
或${变量名}
# 编译器和编译选项(开启所有警告信息)
cc=gcc
CFLAGS=-Wall
#文件相关
start=hello
need=hello.o
need1=hello.c
# hello :hello.o
$(start):$(need)
# gcc -Wall -o hello hello.o
$(cc) $(CFLAGS) -o $(start) $(need)
# hello.o : hello.c
$(need):$(need1)
# gcc -c hello.c
$(cc) -c $(need1)
立即变量
- 格式:
变量名 := 表达式
- 变量定义时会立即计算表达式的值,并把结果赋给当前变量。这意味着后续对表达式中使用的变量重新赋值并不会影响已经定义的立即变量的值。
a = 1
b = 2
# val_a的值就一直是1
val_a := $(a)
# val_b的值在用到的时候才会被赋值
val_b = ${b}
a = 10
b = 20
test:
@echo $(val_a)
@echo $(val_b)
自动变量
常用的自动变量
- $@:目标,如下方的
main
- $^:所有目标依赖,如
math.o
和``main.o` - $<:目标依赖列表中的第一个依赖.如
math.c
和main.c
- $?:所有目标依赖中被修改过的文件(本轮)
main: math.o main.o
# gcc -o -main math.o main.o
gcc -o $@ $^
math.o: math.c Math.h
# gcc -c math.c
gcc -c $<
main.o: main.c Math.h
# gcc -c main.c
gcc -c $<
#