make命令的简单用法
最近发现公司已有项目中有个Makefile文件,构建项目用的。以前好像在Linux系统里见到过
下面就通过项目里makefile文件的配置内容学习记录一下make是怎么用的。
make基本规则语法
# 定义规则
target: prerequisities
[tab] commands
# 执行
make target
target: 要生成的文件名或伪目标(只要target在当前目录下不存在,就会构建,否则执行命令也不会有任何反应)
prerequisite: 前置条件(重新构建的判断依据,只要这两个文件发生改变或任意一个不存在,就会构建)
[tab] 命令之前必须输入一个tab
commands:要在shell中执行的命令(每一行命令在一个shell窗口, 互相独立, \ 连行符号表示之后的命令跟当前行在一个shell窗口)
makefile里的一些符号
- #表示注释 \用在commands里,表示在同一行
- @关闭回声。make默认会把每一行内容先打印再执行,这个符号可以关闭当前行的打印
- $()读取定义的变量的值 $读取shell中的变量的值,因为make会把commands里的读取shell中的变量的值,因为make会把commands里的读取shell中的变量的值,因为make会把commands里的符号进行转义
赋值符号
- = 执行时扩展值,允许递归扩展
- := 定义时扩展
- ?= 该变量为空的时候才设置值
- += 将值追加到目标值的尾部(类似于字符串的连接??)
内置变量
$(CC) 当前编译器
$@ 终端输入的命令make
后跟的目标名 例如: make source --> $@ = source$< 第一个前置条件
$^ 所有的前置条件
$(@D), $(@F) 目标所在的目录和文件名
$(<D), $(<F) 第一个前置条件所在的目录和文件名
条件判断
- ifdef variable-name … endif 值是否为空,不为空走true分支
更多用法见https://www.gnu.org/software/make/manual/make.html#Conditional-Functions
执行方法
- 普通方法执行起来跟调用变量很像 $(functionname arguments)
- 遍历方法 $(foreach var,list,text)
- (callvariable,param,param,…)执行时可通过(call variable,param,param,…) 执行时可通过(callvariable,param,param,…)执行时可通过(1),$(2)取得传入的参数值
- $(origin variable) 不对变量进行操作,只是表明变量来源
更多用法见https://www.gnu.org/software/make/manual/make.html#Syntax-of-Functions
实例分析
# step print
define printStep
@echo "\033[1;33mPC-SHARED:\033[0m $1"
endef# Must be the first target!
default:@echo $(usage)# 检验版本依赖
check-yarn-version:./scripts/check-yarn-version.sh
# 更改安装源
install: check-yarn-versionyarn --registry=http://registry.npm.qqaa-inc.com --disturl=https://npm.taobao.org/dist
# 本地开发 等价于以前的npm run dev
dev:cd packages/webpack && yarn dev -- $(dev_args)# PC
buildPC:$(call printStep, "[PC BUILD] START")@rm -rf static/build@cd packages/webpack && yarn deploy$(call printStep, "[PC BUILD] END")
make命令的简单用法相关推荐
- Windump网络命令的简单用法
Windump网络命令的简单用法 大家都知道,unix系统下有个tcpdump的抓包工具,非常好用,是做troubleshooting的好帮手.其实在windows下也有一个类似的工作,叫windum ...
- 打包到指定目录_linux中打包文件tar命令的简单用法
tar 是tape archive的缩写,原理就是把多个文件前后连在一起,形成一个大的文件,tar命令并不对文件进行压缩. tar打包文件起码要跟上2个选项:-cf,-c选项是创建打包文件,-f选项是 ...
- pwd命令是什么的缩写_pwd,pwd命令的简单用法
pwd在不同行业有不同的意思:在web开发中,程序员常用pwd表示密码(password)的缩写.在Linux系统中,pwd命令用作显示工作目录的复路径名称,全称是"PrintWorking ...
- linux r后台执行,screen 命令简单用法 Linux后台执行 就用它
screen 命令简单用法 现在很多时候我们的开发环境都已经部署到云端了,直接通过SSH来登录到云端服务器进行开发测试以及运行各种命令,一旦网络中断,通过SSH运行的命令也会退出,这个发让人发疯的. ...
- 反编译工具jad简单用法
反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...
- shell expect的简单用法
为什么需要expect? 我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...
- Shellz中awk的简单用法
其实shell脚本的功能常常被低估.在实际应用中awk sed 等用法可以为shell提供更为强大的功能.下面我们将一下awk调用的简单方法进行了总结.方便同学们学习: awk的简单用法: 第一种调用 ...
- linux mount命令参数及用法详解
linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...
- EMCA和EMCTL的简单用法
背景 其实这两个完全是两回事,不过倒是有关系,emca就是建立的资料库,建立后就用emctl来管理服务了.oem有问题基本都是重建emca,然后用emctl来操作. 当时用emca感觉真是一阵空白,太 ...
最新文章
- vue-cli-plugin-element的使用
- mysql signed 长度_浅谈mysql字段长度设置
- Spring context命名空间
- 第四十三篇 面向对象进阶2
- 惠新宸:我也曾经是“不适合”编程的人
- poj 3714 Raid
- 2021-09-02spark streaming
- 【SQL注入-01】SQL语句基础及SQL注入漏洞原理及分类
- 800道Python习题,花了一个月终于整理出来了,挑战一下自己能做对多少题
- arcgis 批量计算几何_计算几何_ArcGIS基础视频教程第一季_其他视频-51CTO学院
- MultiWarhead 球缺罩界面设计
- 在主窗口中打开一个子窗口,主窗口和子窗口怎么传递参数?
- python爬虫之汽车之家论坛帖子内容爬取
- 墨菲定律、二八法则、马太效应、手表定理、“不值得”定律等左右人生的金科玉律。
- opencv 鼠标绘图
- android记事本答辩,安卓记事本毕业答辩论文.doc
- 计算机专业开题报告英文版,计算机专业开题报告范文样本(计算机专业论文开题报告范文)...
- 利用scrapy采集酷狗音乐网站的音乐信息并保存本地MongoDB数据库
- torchnet.meter使用教程
- 收款机收银机测试流程