1.1 语法:
目标:依赖
Even:
@echo "Hello Makefile"
运行方式:
make
运行结果:
Hello Makefile
1.2 目标与依赖相互嵌套
Even:Jacy
@echo "hello makefile"
Jacy:ChuiHua
@echo "hello Even"
ChuiHua:
@echo "hello Jacy"
运行结果:
hello Jacy
hello Even
hello makefile
1.3 示例:
Makefile第一版
/*
目标:依赖
-I 头文件
-L 库文件
-l 链接文件
*/
./bin/main:./src/*.c
gcc ./bin/main -o ./src/main.c -I./inc -L./lib -my_lib
2.1 变量
A = apple
B = I love China
C = $(A) tree // $() 引用
Even:
@echo $(A)
@echo $(B)
@echo $(C)
2.2 示例2
Makefile第二版
TAG= ./bin/main #目标
SRC = ./src/*.c #依赖
CC=gcc #编译器
O = -o #编译选择
CONFIG=-I./inc -L./lib -lmy_lib
$(TAG):$(SRC)
$(CC) $(SRC) $(O) $(TAG) $(CONFIG)
clean:
rm ./bin/*
2.3 变量定义方式
2.3.1 递归定义方式
#在第一行使用到变量B但是还没有定义,以此管理器进行全文搜索找到B并引用
A = I love $(B)
B = China
2.3.2 直接定义方式
B = China
A := I love $(B)
# A在B之前引用B 则为空
2.3.3 条件定义方式
A = apple
A ?= I love China
# 如果A没有被定义,则定义
2.3.4 多行命令定义方式
define commands
echo “thank you!”
echo “you are welcome.”
endef
2.4变量操作方式
2.4.1 追加
A = apple
A += tree
2.4.2 修改
A = srt.c string.c tcl.c
B = $(A:%.c=%.o) #将.c文件改为.o文件
2.5 示例3
Makefile第三版本
TAG=./bin/main
SRC=./src/Input.c ./src/main.c ./src/Oper.c ./src/Output.c
OBJ=$(SRC:%.c=%.o)
CC=gcc
O=-o
CONFIG=-I./inc
$(TAG):$(OBJ)
$(CC) $(^) $(O) $(@) $(CONFIG)
%.o:%.c
$(CC) $< -o $(@) $(CONFIG) -c
clean:
$(RM) ./bin/* ./src/*.o
3.1 函数
最终版本Makefile
TAG=./bin/main
SRC= $(wildcard src/*.c)
OBJ=$(SRC:%.c=%.o)
CC=gcc
override CONFIG += -I./inc
$(TAG):$(OBJ)
$(CC) $(^) -o $(@) $(CONFIG)
%.o:%.c
$(CC) $< -o $(@) $(CONFIG) -c
clean:
$(RM) ./bin/* ./src/*.o
.PHONY:clean