嵌入式(十四)——Makefile编写及多级目录

工程管理器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:定义一些变量
    tree图

  • 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!
  • 默认变量
Makefile中默认变量默认变量的作用
$@表示目标文件名称,包含扩展名
$^表示所有的依赖文件,以空格隔开,不重复
$<表示第一个依赖文件的名称
$+表示所有的依赖文件,空格隔开,可以重复
$*表示目标文件的名称,不包含扩展名
$?依赖项中,所有比目标文件新的依赖文件

多用前三个

hello:hello.o
		@gcc $^ -o $@
  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周末不下雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值