最近发现公司已有项目中有个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里的符号进行转义

赋值符号

  1. = 执行时扩展值,允许递归扩展
  2. := 定义时扩展
  3. ?= 该变量为空的时候才设置值
  4. += 将值追加到目标值的尾部(类似于字符串的连接??)

内置变量

  • $(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命令的简单用法相关推荐

  1. Windump网络命令的简单用法

    Windump网络命令的简单用法 大家都知道,unix系统下有个tcpdump的抓包工具,非常好用,是做troubleshooting的好帮手.其实在windows下也有一个类似的工作,叫windum ...

  2. 打包到指定目录_linux中打包文件tar命令的简单用法

    tar 是tape archive的缩写,原理就是把多个文件前后连在一起,形成一个大的文件,tar命令并不对文件进行压缩. tar打包文件起码要跟上2个选项:-cf,-c选项是创建打包文件,-f选项是 ...

  3. pwd命令是什么的缩写_pwd,pwd命令的简单用法

    pwd在不同行业有不同的意思:在web开发中,程序员常用pwd表示密码(password)的缩写.在Linux系统中,pwd命令用作显示工作目录的复路径名称,全称是"PrintWorking ...

  4. linux r后台执行,screen 命令简单用法 Linux后台执行 就用它

    screen 命令简单用法 现在很多时候我们的开发环境都已经部署到云端了,直接通过SSH来登录到云端服务器进行开发测试以及运行各种命令,一旦网络中断,通过SSH运行的命令也会退出,这个发让人发疯的. ...

  5. 反编译工具jad简单用法

    反编译工具jad简单用法 下载地址: [url]http://58.251.57.206/down1?cid=B99584EFA6154A13E5C0B273C3876BD4CC8CE672& ...

  6. shell expect的简单用法

    为什么需要expect?     我们通过Shell可以实现简单的控制流功能,如:循环.判断等.但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如 telnet服务器等进 ...

  7. Shellz中awk的简单用法

    其实shell脚本的功能常常被低估.在实际应用中awk sed 等用法可以为shell提供更为强大的功能.下面我们将一下awk调用的简单方法进行了总结.方便同学们学习: awk的简单用法: 第一种调用 ...

  8. linux mount命令参数及用法详解

    linux mount命令参数及用法详解 非原创,主要来自 http://www.360doc.com/content/13/0608/14/12600778_291501907.shtml. htt ...

  9. EMCA和EMCTL的简单用法

    背景 其实这两个完全是两回事,不过倒是有关系,emca就是建立的资料库,建立后就用emctl来管理服务了.oem有问题基本都是重建emca,然后用emctl来操作. 当时用emca感觉真是一阵空白,太 ...

最新文章

  1. vue-cli-plugin-element的使用
  2. mysql signed 长度_浅谈mysql字段长度设置
  3. Spring context命名空间
  4. 第四十三篇 面向对象进阶2
  5. 惠新宸:我也曾经是“不适合”编程的人
  6. poj 3714 Raid
  7. 2021-09-02spark streaming
  8. 【SQL注入-01】SQL语句基础及SQL注入漏洞原理及分类
  9. 800道Python习题,花了一个月终于整理出来了,挑战一下自己能做对多少题
  10. arcgis 批量计算几何_计算几何_ArcGIS基础视频教程第一季_其他视频-51CTO学院
  11. MultiWarhead 球缺罩界面设计
  12. 在主窗口中打开一个子窗口,主窗口和子窗口怎么传递参数?
  13. python爬虫之汽车之家论坛帖子内容爬取
  14. 墨菲定律、二八法则、马太效应、手表定理、“不值得”定律等左右人生的金科玉律。
  15. opencv 鼠标绘图
  16. android记事本答辩,安卓记事本毕业答辩论文.doc
  17. 计算机专业开题报告英文版,计算机专业开题报告范文样本(计算机专业论文开题报告范文)...
  18. 利用scrapy采集酷狗音乐网站的音乐信息并保存本地MongoDB数据库
  19. torchnet.meter使用教程
  20. 收款机收银机测试流程

热门文章

  1. 如何在excel中快速使用日期控件?
  2. 图解clientWidth,offsetWidth,scrollWidth
  3. 笔记本电脑参数简析(学生选择)
  4. 吃根香蕉让你不怯场(图)
  5. 【Py】下划线命名与驼峰命名转换方式汇总
  6. 从零到一 django + vue 构建前后端分离项目
  7. Python3 - Docker基础详解(三)
  8. 垂直线在html中怎么做,在html页面的右侧和左侧添加两条垂直线(矩形)
  9. 情人节选什么礼物?盘点最火爆几款礼物
  10. 人工智能还不错,人工智障就算了