make工具的使用

make工具的使用

​ 本节是b站上关于make教学的笔记,参考网址:

https://www.bilibili.com/video/BV1xt411b7Qu?from=search&seid=2641837473750143994&spm_id_from=333.337.0.0

1、什么是make

​ make工程管理器是Linux下的一个“自动编译管理器”,对于维护一些具有相互依赖关系的文件特别有用,能自动确定工程的那部分源文件需要重新编译,然后执行命令去编译它们。

​ make使用语法:make [options] [target]…

options为make工具的参数选项,target为makefile中指定的目标。

make工具参数选项:

  • -f filename :显示的指定文件作为Makefile;
  • -C dimname:制定make在开始运行后的工作目录为dimname
  • -e:不允许在Makefile中替换环境变量的赋值
  • -k:执行命令出错时,放弃当前目标,继续维护其它目标
  • -n:按实际运行时的执行顺序模拟执行命令(包括用@开头的命令),没有实际执行效果,仅用于显示执行过程;
  • -p:显示Makefile中所有变量和内部规则;
  • -r:忽略内部规则
  • -s:执行但不显示命令,常用来检查Makefile的正确性;
  • -t:修改每个目标文件的创建日期;
  • -I:忽略运行make中执行命令的错误;
  • -V:显示make的版本号。
2、Makefile的书写规则
2.1、Makefile基本语法规则
target:prerequisites
command

或者:

target:prerequisite;command
command
  • target是目标文件名,多个文件以空格分开,可以使用通配符*、?、[ ];
  • Prerequisite是目标所依赖的文件;
  • Command是命令行;以tab键开头;
2.2、通配符

​ 通配符使用在变量中,如objects = *.o,但不会在变量中展开,如需展开,可用objects := $(wildcard *,o);

2.3、伪目标

​ 伪目标并不是一个文件,而是一个标签。为避免伪目标和文件重名,可以使用.PHONY来显示的指明一个目标就是伪目标

2.4、多目标

​ 自动化变量“$@”表示目前规则中所有目标的集合。

3、Makefile的命令

​ 如果要让上一条命令的结果应用在下一条命令,需要使用分号分隔这两条命令。为了忽略命令的出错,在命令行前加一个减号“-”,标记为不管命令是否出错都认为是成功的。

4、Makefile中使用变量
  • 变量的命名可以包含字符串、数字、下划线,但不能包含“:”、“#”、“=”。
  • 变量在申明时需要给初值,在使用时在变量名前面加上“$”符号。
  • 变量支持嵌套定义;
  • 使用“:=”操作符定义变量时,前面的变量不能使用后面的变量。
  • 使用“?=”操作符,变量若没有定义,则赋值,否则什么也不做。
  • 使用“+=”操作符给变量追加值。
5、Makefile中常用函数调用
语法:$(<fun ction> <arguments>)或${<fun ction> <arguments>}

是函数名,是函数的参数。

5.1字符串处理函数
  • 字符串替换函数subst

    格式:$(subst <from>,<to>,<text>)
    功能:把<text>中<from>字符串替换成<to>。
    
  • 模式字符串替换函数patsubst

    格式:$(patsubst <patten>,<replacement>,<text>)
    
  • 查找字符串函数findstring

    格式:$(findstring <find>,<in>)
    
  • 过滤函数filter

  • 反过滤函数filter-out

  • 排序函数sort

  • 取单词函数word

  • 取单词串函数wordlist

  • 单词个数统计函数words

  • 首单词函数firstword

5.2、文件名操作函数
  • 取目录函数dir
  • 取文件名函数notdir
  • 取后缀名函数suffix
  • 名称取前缀函数basename
  • 加后缀函数addsuffix
  • 加前缀函数addprefix
5.3 循环函数foreach
格式:$(foreach <var>,<list>,<text>)

把参数中的单词逐一取出放到参数所指定的变量中,然后再执行 所包含的表达式。

5.4 条件判断函数
ifeq、ifneq、ifdef、ifndef
$(if <condition>,<then-part>,<else_part>)
6、Makefile的隐式规则

​ Makefile预先约定好的,不用再写出来的规则。隐式规则中使用的变量有两种,一种是命令相关的,一种是参数相关的。

​ 模式规则,目标的定义需要有%。例如%.o:%.c;<command…>,指出了所有的.c文件生成相应的.o文件跟规则。

​ 自动化变量,把模式中所定义的一系列文件自动的逐个的取出,直到所有的符合模式的文件都符合要求。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

skyer_lhb

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

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

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

打赏作者

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

抵扣说明:

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

余额充值