嵌入式课堂4拓展知识

Makefile代码分析
一、scripts目录头文件Makefile
在这里插入图片描述
1.变量定义:
(1)通过“=”来实现
例如:a1= $(a2)
a2= $(a3)
a3= a.o
这种方式下变量a1的值是a.o,也就是说前面的变量可以通过后面的变量来定义。但使用这种方式定义变量时,要防止出现死循环的情况。图中用Libs代替-lpthread(-l用来链接库)
(2)通过“:=”来实现
例如:a1:= a.o
a2:= $(a1) b.o
这种方式下变量a1的值是a.o,变量a2的值是a.o b.o。图片中用CC代替gcc,用CFLAGS代替-Wall(开警告) -o3(三级优化),用Target代替client(客户端)。
(3)通过“+=”来实现
例如:a1= a.o
a1+= b.o
这种方式下变量a1的值是“a.o b.o”。也就是说“+=”可以实现给变量追加值。等同于示例:
a1= a.o
a1:= $(a1) b.o 可以看到,Makefile的“+=”和C语言中的“+=”是非常相似的。
代码中变量Modules指当前软件代码所有的功能目录check_putin pack_message main
2、函数
(1)函数wildcard
格式: $(wildcard 模式参数)
功能:列出当前目录下所有符合格式参数的文件名。
返回值:当前目录下所有符合模式参数的文件名。
例如:result := $(wildcard .c)
result的值为当前目录下所有的C文件名。图中代码 Source := ( w i l d c a r d s r c / ∗ . c ) 指 的 是 列 出 当 前 目 录 下 s r c 目 录 的 所 有 . c 文 件 , S o u r c e = s r c / m a i n . c s r c / a d d . c ( 2 ) 函 数 p a t s u b s t 格 式 : (wildcard src/*.c)指的是列出当前目录下src目录的所有.c文件,Source=src/main.c src/add.c (2)函数patsubst 格式: (wildcardsrc/.c)src.cSource=src/main.csrc/add.c(2)patsubst(patsubset模式参数,参数1,参数2)
功能:把参数2中符合模式参数的单词(单词是指参数中被空格隔开的字符串)替换成参数1.
返回值:被替换后的参数2.
例如:result := $(patsubst %.c, %.o, x.c y.c)
result的值为“x.o y.o”。图中代码 Objs := ( p a t s u b s t (patsubst %.c,%.o, (patsubst(Source))是将Source里的.c文件编译成.o文件,Objs=src/main.o src/add.o
(3)函数addsuffix
格式:$(addsuffix 参数1,参数2)
功能:在参数2中的每个单词加上后缀参数1.
返回值:加上后缀的所有单词.
例如:result := $(addsuffix .c, x y)
result的值为“x.c y.c”。如图所示代码AllObjs := ( a d d s u f f i x / s r c / ∗ . o , (addsuffix /src/*.o, (addsuffix/src/.o,(Modules)) #Objs=check_putin/src/
.o pack_message/src/.o main/src/.o
二、总控Makefile
在这里插入图片描述
第一行代码:导入Makefile,可以使用该Makefile定义的变量
第二行代码:进入 ( 1 ) 所 对 应 的 目 录 , 执 行 m a k e 命 令 。 1 、 伪 目 标 a l l ( 伪 目 标 使 用 方 式 : m a k e 伪 目 标 名 ) a l l 运 行 命 令 “ m a k e a l l ” 后 , M a k e 会 把 a l l 看 成 是 最 终 的 目 标 。 由 于 伪 目 标 和 真 实 目 标 一 样 都 有 依 赖 文 件 , 所 以 M a k e 会 更 新 a l l 的 依 赖 文 件 t e s t 、 a . o 和 b . o 。 上 图 指 更 新 T a r g e t 2 、 函 数 f o r e a c h 格 式 : (1)所对应的目录,执行make命令。 1、伪目标all(伪目标使用方式: make 伪目标名) all运行命令“make all”后,Make会把all看成是最终的目标。由于伪目标和真实目标一样都有依赖文件,所以Make会更新all的依赖文件test、a.o和b.o。上图指更新Target 2、函数foreach 格式: (1)make1all(使make)allmakeallMakeallMakealltesta.ob.oTarget2foreach(foreach 变量参数,参数1,表达式)
功能:循环取出参数1中的单词赋给变量参数,然后运行表达式。
返回值:表达式的运行结果
例如:a:= x y z
result := $(foreach b, $(a), ( b ) . c r e s u l t 的 值 为 “ x . c y . c z . c ” 。 注 意 , b 在 这 里 是 一 个 临 时 的 变 量 。 m m 那 行 : 进 入 各 个 功 能 目 录 执 行 m a k e 命 令 。 3 、 函 数 c a l l 格 式 : (b).c result的值为“x.c y.c z.c”。注意,b在这里是一个临时的变量。mm那行:进入各个功能目录执行make命令。 3、函数call 格式: (b).cresultx.cy.cz.cbmmmake3call(call 变量参数,参数…)
功能:循环把参数依次赋给变量参数中的 ( 1 ) 、 (1)、 (1)(2)…
返回值:赋值后的变量值
例如:a:= $(2) $(1)
result := $(call $(a), x y)
result的值为“yx”。mc那行:进入各个功能目录执行make_clean命令。
三、功能目录Makefile
在这里插入图片描述
check_putin、pack_message、main中的Makefile代码都如上图所示
都是更新变量Obj

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
内容介绍 项目结构: Controller层:使用Spring MVC来处理用户请求,负责将请求分发到相应的业务逻辑层,并将数据传递给视图层进行展示。Controller层通常包含控制器类,这些类通过注解如@Controller、@RequestMapping等标记,负责处理HTTP请求并返回响应。 Service层:Spring的核心部分,用于处理业务逻辑。Service层通过接口和实现类的方式,将业务逻辑与具体的实现细节分离。常见的注解有@Service和@Transactional,后者用于管理事务。 DAO层:使用MyBatis来实现数据持久化,DAO层与数据库直接交互,执行CRUD操作。MyBatis通过XML映射文件或注解的方式,将SQL语句与Java对象绑定,实现高效的数据访问。 Spring整合: Spring核心配置:包括Spring的IOC容器配置,管理Service和DAO层的Bean。配置文件通常包括applicationContext.xml或采用Java配置类。 事务管理:通过Spring的声明式事务管理,简化了事务的处理,确保数据一致性和完整性。 Spring MVC整合: 视图解析器:配置Spring MVC的视图解析器,将逻辑视图名解析为具体的JSP或其他类型的视图。 拦截器:通过配置Spring MVC的拦截器,处理请求的预处理和后处理,常用于权限验证、日志记录等功能。 MyBatis整合: 数据源配置:配置数据库连接池(如Druid或C3P0),确保应用可以高效地访问数据库。 SQL映射文件:使用MyBatis的XML文件或注解配置,将SQL语句与Java对象映射,支持复杂的查询、插入、更新和删除操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值