Makefile学习笔记

前言

正文

基础知识

  1. makefile中的shell的含义:

  2. 在规则中需要使用符号 本 身 的 地 方 , 需 要 书 写 两 个 连 续 的 本身的地方,需要书写两个连续的 $

  3. $? 表示比目标还要新的依赖文件列表

  4. 分号是分隔符,反斜线是换行符,反斜杠是转义字符。

  5. CUR_C := $(filter %.c, ( C U R S R C ) ) : 过 滤 掉 所 有 (CUR_SRC)):过滤掉所有 (CURSRC)):(CUR_SRC)里面不符合%.c的文件 “filter”函数可以用来去除一个变量中的某些字符串.

  6. cat 111.txt | tr [a-z] [A-Z] > 222.txt:tr命令用于转换文本文件中的字符

  7. $(strip STRINT)
    函数名称:去空格函数—strip。
    函数功能:去掉字串(若干单词,使用若干空字符分割) “STRINT”开头和结尾的
    空字符,并将其中多个连续空字符合并为一个空字符。
    返回值:无前导和结尾空字符、使用单一空格分割的多单词字符串。
    函数说明:空字符包括空格、[Tab]等不可显示字符。

  8. $1表示取值

  9. $(foreach var text commond):
    var:局部变量
    text:文件列表,空格隔开,每一次取一个值赋值为变量var
    commond:对var变量进行操作(一般会使用var变量,不然没意义),每次操作结果都会以空格隔开,最后返回空格隔开的列表。

  10. call:call函数是唯一一个可以用来创建新的参数化的函数。 ( c a l l < e x p r e s s i o n > ; , < p a r m 1 > ; , < p a r m 2 > ; , < p a r m 3 > ; . . . ) 当 m a k e 执 行 这 个 函 数 时 , < e x p r e s s i o n > ; 参 数 中 的 变 量 , 如 (call <expression>;,<parm1>;,<parm2>;,<parm3>;...) 当make执行这个函数时,<expression>;参数中的变量,如 (call<expression>;,<parm1>;,<parm2>;,<parm3>;...)make<expression>;(1), ( 2 ) , (2), (2)(3)等,会被参数< parm1>;,;,;依次取代。而;的返回值就是 call函数的返回值。

  11. =:代表的是赋值的意思:OBJECTS=$(SOURCES:.cpp=.o):代表的是将SOURCES 中的.o都代替成.cpp。

  12. wildcard取所有目录下的.c文件。

  13. 四种赋值方式
    简单赋值 ( := ) 编程语言中常规理解的赋值方式,只对当前语句的变量有效。
    递归赋值 ( = ) 赋值语句可能影响多个变量,所有目标变量相关的其他变量都受影响。
    条件赋值 ( ?= ) 如果变量未定义,则使用符号中的值定义变量。如果该变量已经赋值,则该赋值语句无效。
    追加赋值 ( += ) 原变量用空格隔开的方式追加一个新值。

在这里插入图片描述

教程

  1. makefile 的编写
    规则的三要素:目标,依赖,命令
    目标:依赖条件
    命令
    一定要有个TAP键
    在这里插入图片描述
  2. 在MakeFile中如果有多条规则的话,那么默认第一个目标就是终极目标。
  3. 为了防止每次修改一个就得 全部都编译,就把依赖的目标更改为.o文件。
  4. 工作原理:
    在这里插入图片描述
    makefile版本
  5. 版本一:
app:main.c add.c sub.c mul.c
	gcc main.c add.c sub.c mul.c -o app
  1. 版本二:
  2. 版本三:使用变量名代表一系列名字 target:目标
    app: main.o add.o sub.o
    gcc main.o sub.o mul.o -o app
    %.o:%.c ->会在找main.o找不到的时候,自动把main填入达到%里面。
    makefile中的自动变量:

$<: 规则中的第一个依赖
$@:规则中的目标
$^:规则中的所有依赖
只能在规则的命令中使用。
在这里插入图片描述

  1. 版本四:
#makefile自己维护的变量
CC=cc
# CPPFLAGS:
CPPFLAGS = 
# 这里的cc其实就是gcc


5. 版本五:

在这里插入图片描述

  1. makefile给我们提供的函数都是返回值的。
  2. wildcard:获取指定目录下的.c文件:wildcard
  3. patsubst:把指定目录下的.c 文件替换成.o。 这里模式匹配使用的是%,不是*。
  4. 给makefile提供函数传参,只需要将其参数与函数名用空格分离即可。但参数和参数之间使用逗号进行间隔。
  5. 取变量里面的内容记得要加$。
  6. 这样获取到的obj,就可以获取一系列函数的.o文件名字的集合。
  1. 版本六:Clean目标的加入
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

1.-rm :这个-的含义就是忽略掉当前命令执行失败的情况。
2. 查找指定目录下,指定类型的文件: src = $(wildcard ./*.c);
3. 匹配替换函数:obj = ( p a t s u b s t (patsubst %.c,%.o, (patsubst(src);
4. .PHONY:这个的意义是,这个是个伪目标,所以,即使当前文件夹中存在clean这个文件,也依然会执行clean下面的语句。

三个自动变量:

  1. $<: 规则中的第一个依赖
  2. $^:规则中的所有依赖
  3. $@:规则中的目标

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值