Makefile 使用(2):基础知识整理

简介: 本文主要介绍一些makefile中常用的一些基础知识。涉及make使用、即时变量和延时变量、导出变量、伪目标以及相关函数。

Make 命令的使用


当我们执行 make 命令时,它会去当前目录下查找名为 Makefile 的文件,并解析执行命令。


make 命令后也可以跟参数:


  • make -f Makefile.build:-f 指定文件,不再使用名为 Makefile 文件


  • make -C a/ -f Makefile.build:-C 指定目录,切换到 a目录下


  • make -C a/ -f Makefile.build other_target不再默认生成第一个目标,生成指定的目标


即时变量和延时变量


变量的定义语法形式如下:


A = xxx   //延时变量
B ?= xxx  //延时变量,只有第一次定义时的赋值有效;如果曾经定义过,此赋值无效
C := xxx  //即时变量
D +=yyy   //如果D在前面是延时变量,那么现在它依然是延时变量;如果D在前面是即时变量,那么它现在还是即时变量


example:


image.png


  • A:延时变量,A的值只有在执行后才确定。


  • C:延时变量,第二次赋值无效


  • B:即时变量:就近原则,后面的值会覆盖原有的值


变量的导出(export)


在编译程序时,我们会不断地使用make -C dir 切换到不同的目录,执行其他目录的Makefile。如果希望让某个变量的值在所有目录中都可见,要把它export出来


CC := $(CROSS_COMPILE)gcc
export CC


Makefile 使用 shell命令



TOP_DIR := $(shell pwd)


Makefile 放置第一个目标


执行 make 命令时,如果不指定目标,那么它默认去生成第一个默认目标,因此第一个目标的位置很重要


first_target: //放在文件前面
...          //其他代码,比如include等
first_targrt: $(xxx) $(yyy) //在文件后面完善依赖  
command


伪目标(.PHONY)


我们 Makefile 中有这样的目标:


clean:  
rm -f $(shell find -name "*.o")  
rm -f $(TARGET)


如果当前目录下面正好有名为 clean 的文件,那么执行clean时,就不会执行那些删除命令。


这时,可以通过.PHONY,将 clean 设置为伪目标,这样删除命令即可正确执行。


.PHONY: clean


常用函数


foreach


见 Makefile 使用1


wildcard


见 Makefile 使用1 


filter


语法:$(filter pattern..., text)


作用:把 text 中 符合pattern的字符串过滤出来


用法:


obj-y :=a.o b.o c/ d/
DIR := $(filter %/, $(obj-y)) //结果为c/ d/


filter-out


语法:$(filter-out pattern..., text)


作用:把 text 中 符合pattern的字符串过滤扔掉


用法:


obj-y :=a.o b.o c/ d/
DIR := $(filter-out %/, $(obj-y)) //结果为a.o b.o


patsubst


语法:$(patsubst pattern, replacement,text)


作用:寻找text 中 符合pattern的字符,并替换为replacement


用法:


subdir-y := c/ d/
subdir-y := $(patsubst %/, %, $(subdir-y)) //结果为c d


总结


文章主要介绍了makefile使用过程中的一些基础知识,知识点比较散。


  • make -C


  • make -f


  • := , ?=, = , +=


  • export


  • .PHONY


  • filter函数


  • filter-out函数


  • patsubst函数
相关文章
|
编解码 监控
Zoom + OBS + B 站直播配置
Zoom + OBS + B 站直播配置
|
Java API 开发工具
API参考手册
【10月更文挑战第18天】API参考手册
507 2
|
分布式计算 DataWorks MaxCompute
DataWorks产品使用合集之怎么更改ODPS表的生命周期为永久
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
Ubuntu Python
全网最简约的Vscode配置Anaconda环境(百分百成功)
全网最简约的Vscode配置Anaconda环境(百分百成功)
33570 0
全网最简约的Vscode配置Anaconda环境(百分百成功)
|
网络协议 中间件 Python
使用代理IP的几种方案
使用代理IP的几种方案
516 2
|
JavaScript 数据库
【vue】vue2 数据回显取消编辑不修改原数据
【vue】vue2 数据回显取消编辑不修改原数据
513 1
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp微信小程序的智能家居系统的详细设计和实现
基于SpringBoot+Vue+uniapp微信小程序的智能家居系统的详细设计和实现
442 0
|
Python Windows
02-pycharm详细安装教程(大妈看了都会)
02-pycharm详细安装教程(大妈看了都会)
|
Web App开发 缓存 JavaScript
在IDEA中更改了代码,浏览器中仍运行先前的代码
在IDEA中更改了代码,浏览器中仍运行先前的代码
|
SpringCloudAlibaba 运维 Dubbo
什么是微服务?架构的演变过程
什么是微服务?架构的演变过程
843 0
什么是微服务?架构的演变过程

热门文章

最新文章