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

Makefile注意点总结

1 "="和":="

"="号赋值时,如果右边的值里面有未展开的变量,要等到整个Makefile的变量处理完之后,再展开,也就是说,如果该未被展开的变量的值在

该赋值后面被修改了,那么最后会赋值为修改之后的值。

":="号赋值时,未被展开的变量的赋值时立即被展开然后赋值的。就算后面修改了,也对本变量没有影响。

前者是deferred,后者是immediately。

2 .c.o:

是老式的写法,等价于%.o : %.c

这个称为double suffix rule,.c.o只是一个例子,还有.c.lo,.c.obj等等。

3 关于make中的模式

普通的文件名,普通的变量名也是一种pattern,不一定有通配符正则表达式才是pattern,这种pattern只是能够匹配一个结果而已。

4 什么时候使用$$xxx,即连续使用两个$

分三种情况:

4.1 $$变量名

定义在recipe中的变量,即shell变量,而不是make变量,要用$$+变量名来引用。这样,shell变量和make变量不会发生冲突。

4.2 $$用于avoid expansion

比如echo 'builddir=`dirname "$$0"`',本来在执行这条命令前,make会对$0进行expansion,但是这里加了一个$,就不会expansion了,直接使用$0,会丢掉一个$,就相当于前面的$替后面的$挡了一箭。

这个向文件中写入命令时最常用。

4.3 在bash shell的命令扩展前加上一个$

这个也是作为后面一个$的挡箭牌,这样,执行命令之前,make进行变量扩展之后,就能够保持bash shell的命令行扩展命令本身,会丢掉一个$。

否则,会当成是make的builtin的扩展了。

比如$$(basename xxx),就是linux命令basename,是bash的command expansion,否则就是$(basename xxx),是make的builtin basename的扩展了。

 

转载于:https://www.cnblogs.com/hustdc/p/6271025.html

相关文章:

  • 深入浅出Puppet(一)
  • Mirco F-measure and Macro F-measure
  • mac上使用zsh配置环境变量
  • find用法积累
  • c# 静态变量【学习笔记】
  • linux内核栈与用户栈【转】
  • NodeJS Stream 二:什么是 Stream
  • 枚举转中文,通过反射方法与描述的方式获取
  • log file sync 等待超高一例子
  • Unity 5 Stats窗口
  • svn 安装网站
  • 浅析vue数据绑定
  • Linux CentOS6.6 NFS服务的配置与安装
  • 做网站真难
  • Phoenix(SQL On HBase)安装和使用报告
  • 【162天】黑马程序员27天视频学习笔记【Day02-上】
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • es6要点
  • IDEA常用插件整理
  • JAVA之继承和多态
  • mysql中InnoDB引擎中页的概念
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • react-native 安卓真机环境搭建
  • Redis学习笔记 - pipline(流水线、管道)
  • Redis字符串类型内部编码剖析
  • Vue实战(四)登录/注册页的实现
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • windows下mongoDB的环境配置
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 区块链技术特点之去中心化特性
  • 实习面试笔记
  • 世界上最简单的无等待算法(getAndIncrement)
  • 数组的操作
  • 说说动画卡顿的解决方案
  • 正则表达式
  • 从如何停掉 Promise 链说起
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • #define,static,const,三种常量的区别
  • #鸿蒙生态创新中心#揭幕仪式在深圳湾科技生态园举行
  • $ git push -u origin master 推送到远程库出错
  • (1)Android开发优化---------UI优化
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (非本人原创)史记·柴静列传(r4笔记第65天)
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (十二)devops持续集成开发——jenkins的全局工具配置之sonar qube环境安装及配置
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • (一)【Jmeter】JDK及Jmeter的安装部署及简单配置
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)jdk与jre的区别
  • ./configure、make、make install 命令
  • .bat文件调用java类的main方法
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库