工程管理器make
如何编写Makefile文件
缺点:makefile编译速度很慢,只能实现自动编译,makefile适用于小型项目
1.1 什么是工程
多个源文件 + 其他文件(图片+头文件+脚本文件)
1.2 工程管理器的作用
编译多个文件 (可以实现自动编译)
------gcc + 所有源文件 -o 可执行文件
1.3 makefile文件
1.make的依赖makefile文件
2.makefile文件是一种脚本文件(批处理),存在相关语法
3.makefile语法:
三要素:目标、依赖、命令
格式:
目标:依赖
tab 命令
目标:最终生成的文件
依赖:生成目标时所需要的文件
命令:生成目标时,需要执行的命令
hello:hello.o gcc hello.o -o hello hello.o:hello.c gcc -c hello
真目标和伪目标
真目标:如hello和hello.o
伪目标:如clean
hello:hello.o gcc hello.o -o hello hello.o:hello.c gcc -c hello .PHONY:clean clean: rm -f hello hello.o
对于.PHONY可以查看网站:
Makefile中.PHONY的作用
1.4 执行顺序:
make:默认从第一个目标体执行
make + 目标体:从对应的目标体执行
如果目标体后面依赖的文件是一个目标的话,先执行依赖对应的目标,再执行目标体的命令
再来体会一下
hello:hello.o gcc hello.o -o hello hello.o:hello.c gcc -c hello .PHONY:clean install clean:install rm -f hello hello.o install: cp hello bin
1.5 多级目录的Makefile编写
如果有其他Makefile文件,可以格式:make -f 目标文件(如:Makefile1、Makefile2)
#Makefile1 main:main.c add.c sub.c gcc $^ -o $@
#Makefile2 main:main.o add.o sub.o gcc $^ -o $@ main.o:main.c gcc -c main.c add.o:add.c gcc -c add.c sub.o:sub.c gcc -c sub.c .PHONY:clean clean: rm -f main.o add.o sub.o main
Makefile2更优(非常有必要!!!)
优势:如果单个.c文件被修改了,Makefile2只会重新编译那个修改过后的文件
如果是Makefile1,则都会重新编译,很耗时
隔断
对源码文件进行分类(学会划分目录)
make menuconfig(动态选择,不用命令)
多级目录下的makefile
顶层Makefile:总控Makefile
子目录Makefile:功能Makefile
script目录Makefile:头文件Makefile
查看顺序:script目录 --> 顶层 -->子目录
总控Makefile:进入各个功能子目录下执行make命令,将各个子目录下的.o文件链接生成可执行文件
功能Makefile:将当前目录下的.c文件编译生成.o文件
头文件Makefile:定义一些变量
附
make不会去编译已经是最新的文件
makefile命令尽量成首字母大写,即Makefile
makefile中用#注释
在命令前加@,在运行时,可以隐藏所执行命令
hello:hello.o @gcc hello.o -o hello hello.o:hello.c @gcc -c hello
echo 命令相当于printf(打印)
hello:hello.o @gcc hello.o -o hello @echo make done! hello.o:hello.c @gcc -c hello @echo make done!
默认变量
多用前三个
hello:hello.o @gcc $^ -o $@