1. Makefile 基本使用
命令行的 make 命令支持解析 makefile 和 Makefile 文件。如果我们编写的规则文件不是 makefile 或者 Makefile 文件,那么需要使用-f 选项指定。
[wbyq@wbyq linux_c]$ make -f <规则文件>
复制代码
Makefile 文件内部是以目标作为单位执行规则顺序的。
在 Makefile 文件里使用 shell 命令行的命令时,需要使用 TAB 键开头。
app:app.c
gcc app.c -o app
复制代码
<目标文件名称>:<依赖文件>
什么是依赖文件?就是在生成这个目标之前,需要得到的文件。
2. make 指定目标执行
Makefile 文件里可以有多个目标文件,我们在命令行执行 make 命令默认执行 Makefile 文件里的第一个目标。如果需要执行指定的目标,需要在 make 命令后面加上执行的目标名称即可。
[wbyq@wbyq linux_c]$ make
pwd
/mnt/hgfs/linux-share-dir/linux_c
[wbyq@wbyq linux_c]$ make app2
ls
a.out app.c Makefile makefile_1234567 sum
[wbyq@wbyq linux_c]$ make app3
touch 123.c
touch 456.c
[wbyq@wbyq linux_c]$ make app4
rm 123.c
rm 456.c
[wbyq@wbyq linux_c]$ make app1 app2 app3 app4
pwd
/mnt/hgfs/linux-share-dir/linux_c
ls
a.out app.c Makefile makefile_1234567 sum
touch 123.c
touch 456.c
rm 123.c
rm 456.c
[wbyq@wbyq linux_c]$
复制代码
3. 隐藏 makefile 文件执行命令
方法 1: make -s 方法 2: 在执行的命令前面加上 @符号
4. 示例 1: 编译一个简单的工程
使用显式规则编写 Makefile 文件,编译一个工程。
[wbyq@wbyq linux_c]$ ls
app.c Makefile sum.c sum.h
[wbyq@wbyq linux_c]$ make -n
gcc sum.c -c
gcc app.c -c
gcc sum.o app.o -o app
[wbyq@wbyq linux_c]$ make
gcc sum.c -c
gcc app.c -c
gcc sum.o app.o -o app
[wbyq@wbyq linux_c]$ ./app
sum_val=300
[wbyq@wbyq linux_c]$
复制代码
5. 示例 2: 编译一个简单的工程
使用自动化编译符号优化 Makefile 文件,编译一个工程。
6. 示例 3: 编译一个简单的工程
使用隐式规则编写 Makefile 文件,编译一个工程。
[wbyq@wbyq linux_c]$ ls
app.c Makefile sum.c sum.h
[wbyq@wbyq linux_c]$ make -n
cc -c -o app.o app.c
cc -c -o sum.o sum.c
gcc app.o sum.o -o app
[wbyq@wbyq linux_c]$ make
cc -c -o app.o app.c
cc -c -o sum.o sum.c
gcc app.o sum.o -o app
[wbyq@wbyq linux_c]$ make
make: “app”是最新的。
[wbyq@wbyq linux_c]$ make
cc -c -o app.o app.c
cc -c -o sum.o sum.c
gcc app.o sum.o -o app
复制代码
7. 特殊变量的使用
编写的Makefile文件:
CC=gcc #指定编译器
VPATH=./main:./sum #指定隐式推导时搜索的路径
CFLAGS=-I ./sum #指定编译器编译是自动增加的选项参数
OBJ=app.o sum.o #依赖文件
app:$(OBJ)
$(CC) $^ -o $@
.PHONY:clear #声明伪目标
clear:
rm *.o app
复制代码
评论