makefile
makefile
makefile 的简单示例
假如有三个源文件program.c、pro1.c、pro2.c,program.c文件包含有自定义的头文件lib.h,要求生成可执行文件program。
![文件目录结构 文件目录结构](./images/1554358818437.png)
文件目录结构
$(opt)=-g -Wall -c
test: prgogram.o libtest.a
gcc $< -L. -ltest -o $@
libtest.a: pro1.o pro2.o
ar rv $@ $^
clean:
rm -f *.o
~
出现错误
![错误提示 错误提示](./images/1554360641653.png)
错误提示
检查makefile
拼写错误
![](./images/1554360797826.png)
仍然错误
![](./images/1554361077242.png)
修改关于链接库部分
失败
再探错误原因
$(opt)=-g -Wall -c
这句话很明显是错误的
修正以后,进行测试
![测试结果 测试结果](./images/1554362320801.png)
测试结果
最终的makefile如下
1 opt=-g -Wall
2 test: program.o libtest.a
3 gcc $^ -L. -ltest $(opt) -o $@:
4 libtest.a: pro1.o pro2.o
5 ar rv $@ $^
6 clean:
7 rm -f *.o
另一个练习题
一个程序包括以下内容。
三个C语言源文件:x.c y.c z.c。
一个头文件defs.h:x.c和y.c都使用了defs.h中的声明。
汇编语言文件:assmb.s
数学运算函数库:/home/mqc/lib/libm.so
作下图:
![结构依赖图 结构依赖图](./images/1554363031866.png)
结构依赖图
prog: x.o y.o z.o assmb.o
gcc $^ -L/home/mqc/lib/libm.so -lm -o $@
x.o: x.c defs.h
gcc x.c -c
y.o: y.c defs.h
gcc y.c -c
abssmb: abssmb.s
gcc abssmb.s -c
make的基本知识及其变量
基本知识
- make //默认生成第一个目标文件
- make prog1.o //生成指定
- make -f makefile1 //指定读取makefile1
- make clean
注意如果有同名文件 clean 存在,make clean 会出错
以下为解决方案
.PHONY:clean //避免因为clean文件出现,而无法执行删除命令
clean:
rm *.o
关于变量
变量的作用
使makefile书写简单
变量的定义
变量的引用
内部变量
1. $@
2. $^
3. $<
隐式规则
*.c自动依赖 *.o文件 可以不写出来