一.变量和不同的赋值方法
->makefile中支持程序设计语言中变量的概念
->makefile中的变量只代表文本数据(字符串)
->makefile中的变量名规则
- 变量名可以包含字符,数字,下划线。
- 不能包含 ":" "#" "=" " "
- 变量名大小写敏感
CC := g++
TARGET := hello-world.out
$(TARGET) : func.o main.o
$(CC) -o $(TARGET) func.o main.o
func.o : func.c
$(CC) -o func.o -c func.c
main.o : main.c
$(CC) -o main.o -c main.c
.PHONY : rebuild clean all
rebuild : clean all
all : $(TARGET)
clean :
rm *.o $(TARGET)
二.变量不同的赋值方式
->简单赋值(:=)
->递归赋值(=)
->条件赋值(?=)
->追加赋值(+=)
三.预定义变量的使用
$@: 当前规则中触发命令被执行的目标。
$^: 当前规则中的所有依赖。
$<: 当前规则中的第一个依赖。
例子1:
.PHONY : all first second third
all : first second third
@echo "\$$@ => $@"
@echo "$$^ => $^"
@echo "$$< => $<"
firtst:
second:
third:
输出:
$@ => all
$^ => first second third
$< => first
例子2:
CC := g++
TARGET := hello-world.out
$(TARGET) : func.o main.o
$(CC) -o $(TARGET) func.o main.o
func.o : func.c
$(CC) -o func.o -c func.c
main.o : main.c
$(CC) -o main.o -c main.c
.PHONY : rebuild clean all
rebuild : clean all
all : $(TARGET)
clean :
rm *.o $(TARGET)
使用预定义变量修改后:
CC := g++
TARGET := hello-world.out
$(TARGET) : func.o main.o
$(CC) -o $@ $^
func.o : func.c
$(CC) -o $@ -c $^
main.o : main.c
$(CC) -o $@ -c $^
.PHONY : rebuild clean all
rebuild : clean all
all : $(TARGET)
clean :
$(RM) *.o $(TARGET)