一、Makefile简介
Makefile的必要性:嵌入式开发要将Linux移植到开发版上,而开发版没有图形界面。只能用终端,我们可以用gcc,但是很不方便。而Makefile能解决这个问题。
二、Makefile下载
终端输入:sudo apt install -y build-essential
三、Makefile使用
1.新建文件,并命名为Makefile
或者,终端:vim Makefile
2.代码格式:
目标:前置依赖
\t(tab)代码
3.根据main.c和helloworld.c生成main
main.o:main.c helloworld.h
gcc -c main.c
helloworld.o:helloworld.c helloworld.h
gcc -c helloworld.c
main:main.o helloworld.o
gcc main.o helloworld.o -o main
在Makefile输入以上代码后,在下面终端输入make就可以创造make文件
4.删除命令
clean:
rm main.o helloworld.o
在Makefile输入以上代码后,在下面终端输入make clean就可以把main.o和hello.o文件删除
5.引入变量
设变量名为object
定义变量代码如下
object := main.o helloworld.o
使用变量代码如下
main:$(object)
gcc $(object) -o main
以上代码和第3节作用一样,也可以根据第4节自行改变。
6.自动推导
假设我们没有main.i main.o helloworld.i helloworld.o等文件,我们可以直接从main.c和helloworld.c自动推导到main,并生成main.i这些文件。
例如直接输入:
main:main.o helloworld.o
gcc main.o helloworld.o -o main
缺点:我们更改main.c或helloworld.c都能通过make重新编译。但是更改头文件helloworld.h重新编译没有变化。所以在使用时需要把带头文件的命令提出来。
在前面加上:main.o:helloworld.h
7.声明伪目标
clean就是系统一个伪目标,没有这个文件,但是能清除文件。
但是我们如果创建一个文件就叫clean,那么这个清除文件的作用就没了。所以就需要声明clean,代码如下:
.PHONY:clean
8.忽略错误
执行clean后,再次执行就会报错。说这个文件不存在。但是没有什么影响,我们如果不想让塔报错,在rm前面加个-即可。
9.名称对应
main:$(object)
gcc $(object) -o main
其中,目标是main,
gcc $(object) -o main,也是生成main。
但是生成的文件以gcc这句为主,
如果gcc $(object) -o main123那么生成的就是main123这个文件。
但是我们不要这样,一定要前后对应。