makefile 学习

gcc-编译器
make-linux自带的构建器 , 构建的规则在makefile中

命名 makefile  Makefile
makefile 中的规则
gcc a.c b.c c.c -o app       
目标app  依赖 a.c b.c c.c  命令gcc a.c b.c c.c -o app         
   三部分:目标,依赖,命令
   目标:依赖
    (tab缩进)命令
    app:a.c b.c c.c
    gcc a.c b.c c.c -o app
makefile中由一条或多条规则组成

#缺点:修改一个文件,所有文件都会被全部重新编译
app:main.c add.c sub.c mul.c 
    gcc main.c add.c sub.c mul.c -a app


makefile工作原理:
  检测依赖是否存在,
  不存在,则向下搜索下边的规则,有
规则是用来生成查找的依赖,执行规则中的命令
   如果依赖存在,判断是否需要更新,判断原则:目标时间大于依赖的时间,反之则更新
    (因为目标是后面生成的,文件的时间肯定比依赖的时间晚)


自定义变量: obj=a.o b.o c.o
         obj=10
变量的取值: aa=$(obj)
makefile自带的变量(大写):
  CPPFLAGS  
  CC
自动变量(只能在规则的命令使用):
  $@ 表示规则中的目标
  $<  规则中的第一个依赖
  $^  规则中所有的依赖

例子:
  obj= main.o add.o sub.o mul.o
app:$(obj)
    gcc $^ -o   $@
#    gcc  (obj) -o app
# 模式匹配 %.o:%.c  (%相当于一个匹配符)
#  $@代表规则中的目标%.o
#下面是一个规则
%.o:%.c 
    gcc -c  $< -o $@


------------------------------------------------
makefile 所有的函数都有返回值
函数
 1 查找指定目录下指定类型的文件的函数 wildcard
src=$(wildcard 指定目录  文件类型)        src是自己定义的一个变量
 例 src=$(wildcard ./*.c)    搜索当前目录下.c的文件

 2 匹配替换函数   patsubst
obj=$(patsubst 替换什么类型的文件,替换成什么格式的文件, 要替换的文件的来源)  
   例 obj=$(patsubst %.c,%.o,$(src))     注意要用%

例子
src=$(wildcard ./*.c)
 obj=$(patsubst %.c,%.o,$(src))  
target=app
$(target):$(obj)
    gcc $^ -o   $@
#    gcc  (obj) -o app
%.o:%.c 
    gcc -c  $< -o $@

------------------------------------------------
编写一个清理项目的规则,可以不写依赖
 cleanpro:
     rm *.o app

 clean:
    rm $(obj) $(target) -f
#  -f 强制删除,不会有提示

让make生成不是终极目标的目标:make 目标名
在终端 make cleanpro
 make+目标的名字     生成指定的目标
     
规则的命令加减号-:表示忽略当前的命令执行失败了,继续向下执行
例 
clean:
    -mkdir /abc
    -rm $(obj) $(target) -f

不做目标和依赖更新检查()
声明伪目标:
  .PHONY:  要声明的目标
 例 
# 要写在前面
.PHONY: clean
clean:
    -mkdir /abc
    -rm $(obj) $(target) -f
 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值