当前位置: 首页 > news >正文

Linux下 Makefile文件基本语法二

本文继续上一篇关于 Makefile 文件内容的介绍。上一篇文章如下:

Linux下 Makefile 基本语法_凌雪舞的博客-CSDN博客

一.  Makefile 

上一篇文章介绍了 Makefile基本语法中的变量,模式规则,自动化变量。这里继续介绍 Makefile 的另外一些语法。包括 Makefile 的伪目标,条件判断,函数调用。

1.  Makefile 伪目标

Makefile 有一种特殊的目标——伪目标。不像真正的目标那样会生成一个目标文件。

典型的伪目标是 Makefile 中用来清理编译过程中中间文件的 clean 伪目标。

一般格式如下:

.PHONY: clean   <-- 这句没有也行, 但是最好加上
clean:-rm -f *.o

执行伪目标的效果等于执行了某一个动作, 并不产生目标文件。

2.  Makefile 条件判断

C 语言中我们通过条件判断语句来根据不同的情况来执行不同的分支,Makefile 也支持条件判断。
条件判断的关键字包括:ifeq,ifneq,ifdef,ifndef。

其中ifeq 与 ifneq 成对,ifdef 与 ifndef 成对使用。前者判断是否相等,后者判断变量是否否定义。

语法有两种如下:( ifneq 与 ifeq 用法相似,只是意思相反。)
ifeq 条件语句条件成立时要做的事情
else条件不成立时要做的事情
endif

ifdef 语法格式如下:(ifndef 与 ifdef 用法相似,只是意思相反。)

ifdef <变量名>
如果“变量名”的值非空,那么表示表达式为真,否则表达式为假。

3. Makefile 函数的使用

Makefile 支持函数,类似 C 语言一样,Makefile 中的函数是已经定义好的,我们直接使用,
不支持我们自定义函数。。make 所支持的函数不多。
函数的用法如下:
$(<function> <arguments>)
或是
${<function> <arguments>}
参数集合是函数的多个参数,参数之间以逗号  “,”  隔开,函数名和参数之间以 “空格” 分隔开。

几种常用的函数如下:

(1)  函数 subst :  用来完成字符串替换

调用形式如下:

$(subst <from>,<to>,<text>)   //此函数的功能是将字符串<text>中的<from>内容替换为<to>

(2) 函数 patsubst:  用来完成模式字符串替换

使用方法如下:

$(patsubst <pattern>,<replacement>,<text>)

(3)  函数 dir: 用来获取目录.

使用方法如下: (//从文件名序列<names>中提取出目录部分,返回值是文件名序 <names>的目录部分)

$(dir <names…>) 

(4)  函数 notdir : 去除文件中的目录部分,也就是提取文件名,用法如下:

$(notdir <names…>)

(5)  函数 foreach :用来完成循环,用法如下:

$(foreach <var>, <list>,<text>)
把参数<list>中的单词逐一取出来放到参数<var>中,然后再执行<text>所
包含的表达式。每次<text>都会返回一个字符串,循环的过程中,<text>中所包含的每个字符串
会以空格隔开,最后当整个循环结束时,<text>所返回的每个字符串所组成的整个字符串将会是
函数 foreach 函数的返回值。

(6)  函数 wildcard:    通配符“%”只能用在规则中,只有在规则中它才会展开,如果在变量定义和函数使用时, 通配符不会自动展开,这个时候就要用到函数 wildcard,使用方法如下:

$(wildcard PATTERN…)

 例如如下:

$(wildcard *.c)   //用来获取当前目录下所有的.c 文件,类似“%”。

关于 Makefile 中的内容,以后有机会再在文章中补充。

http://www.lryc.cn/news/21193.html

相关文章:

  • 【前端】JavaScript构造函数
  • STM32单片机之温湿度检测系统(DTH11、OLED、LCD1602)
  • vitepress 就这几步操作,博客就搭好啦?
  • 【Python工具篇】Anaconda中安装python2和python3以及在pycharm中使用
  • Android 网络框架——Retrofit源码精析
  • 分布式算法 - Snowflake算法
  • 【java web篇】Maven的基本使用以及IDEA 配置Maven
  • 【蓝桥集训】第七天并查集
  • 【Playwright】扑面而来的Playwright测试框架
  • React(三) ——新、旧生命周期
  • IT男的一次中年破局尝试--出书
  • Python 内置函数eval()
  • 【ArcGIS Pro二次开发】系列学习笔记,持续更新,记得收藏
  • EasyRecovery16MAC苹果版本Photo最新版数据恢复软件
  • Go的string与strings.Builder
  • 8.Spring Security 权限控制
  • curl / python+selenium爬取网页信息
  • 晶体塑性有限元 Abaqus 三维泰森多边形(voronoi模型)插件 V7.0
  • CPython解释器性能分析与优化
  • Linux 进程:理解进程和pcb
  • 银行数字化转型导师坚鹏:招商银行数字化转型战略研究
  • java 一文讲透面向对象 (20万字博文)
  • 使用file-selector-button美化原生文件上传
  • 0402换元积分法-不定积分
  • 信号类型(雷达)——脉冲雷达(三)
  • 并查集(13张图解)--擒贼先擒王
  • Flutter3引用原生播放器-IOS(Swift)篇
  • 【蓝桥杯每日一题】双指针算法
  • 拼数(一般贪心)
  • LeetCode 热题 C++ 169. 多数元素 10. 正则表达式匹配 155. 最小栈