工程管理器make

1.工程管理器:编译很多文件,(类型不同,存放在不同目录,资源文件使用)组成的软件代码结构
2.make读取makefile里的内容,实现自动编译
“自动编译”
(a)根据makefile文件的内容进行自动编译
(b)根据文件的时间戳来判断文件是否需要编译
3.makefile是个脚本文件(批处理)

makefile语法

目标:依赖
按下tab键 命令
解释:执行命令依赖这个文件,最终生成目标
makefile执行顺序:自上向下,当你的目标依赖的文件又是一个目标时,会先跳转到该目标去执行相关命令
make+目标名 :从该目标开始自上向下执行
4.伪目标:只执行命令,不生成对应的文件
.PHONY:clean install
在这里插入图片描述
5.在命令前面加@可以避免命令回显
echo 在终端上输出字符串
例如@echo make hello.c done
内置变量**$@**可以替代目标
**“#”**注释
定义变量
在这里插入图片描述
在这里插入图片描述

makefile分类

(1)总控makefile:进入各个功能目录(功能目录管理软件代码),执行make命令,并将所有.o文件链接成可执行文件
(2)功能目录makefile:将功能目录下的源文件编译生成目标文件
(3)scripts目录头文件makefile:定义变量,供其他makefile使用

下面是一个demo的自学情况

(1)scripts目录头文件makefile里的内容如下
在这里插入图片描述

CC :=gcc
CFLAGS := -Wall -03
Libs = -lpthread
Target := client
ccSource :=$(wildcard src/*.c  #列出当前目录下src目录的所有.c文件
objs := $(patsubst %.c,%,o,$(Source)) #将source里的.文件编译成.o文件
Modules += check_putin pack_message main #当前软件代码所有的功能目录
A11objs :=$(addsuffix /src/*.o,$(Modules)) #Allobjs:列出所有功能目录下的src目录下的.o文件

 wildcard
格式:$(wildcard模式参数)
功能:列出当前目录下所有符合模式参数的文件名
返回值:当前目录下所有符合模式参数的文件名
例如:
result := $(wildcard *.c)
result的值为当前目录下所有的C文件名。

ccSource :=$(wildcard src/*.c)
//这里ccSource返回的就是src目录下所有.c的文件

 patsubst
格式:$(patsubset模式参数,参数1,参数2)
功能:把参数2中符合模式参数的单词(单词是指参数中被空格隔开的字符串)替换成参数1
返回值:被替换后的参数2

objs := $(patsubst %.c,%,o,$(Source))
//把source这个文件里符合.c的文件全部替换成。o文件

 addsuffix
格式:$(addsuffix 参数1,参数2)
功能:在参数2中的每个单词加上后缀参数1
返回值:加上后缀的所有单词

A11objs :=$(addsuffix /src/*.o,$(Modules))
//

(2)总控makefile代码如下
在这里插入图片描述

modules_make = $(MAKE) -C $(1); //进入$(1)所在的目录执行make命令

定义了四个伪目标
(3)功能目录下的makefile代码如下
在这里插入图片描述
如果我们想要用上述结构编写makefile
首先建立功能目录例如 mkdir -p add/src main/src scripts
然后将对应的.c文件拷到对应的功能目录下
然后剪切makefie模板
修改scripts下面的Makefile,将Target以及Modules进行修改

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值