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

Makefile注意点总结相关推荐

  1. 浅显易懂 Makefile 入门 (12)— Makefile 常见的错误信息

    1. 常见的错误信息 make 执行过程中所产生错误并不都是致命的,特别是在命令行之前存在 -.或者 make 使用 -k 选项执行时. make 执行过程的致命错误都带有前缀字符串 ***.错误信息 ...

  2. 浅显易懂 Makefile 入门 (10)— 嵌套执行 make、export 的使用

    1. 嵌套执行 make 在一个大的工程文件中,不同的文件按照功能被划分到不同的模块中,每个模块可能都会有自己的编译顺序和规则,如果在一个 Makefile 文件中描述所有模块的编译规则,就会很乱,执 ...

  3. 浅显易懂 Makefile 入门 (09)— include 文件包含、MAKECMDGOALS

    1. include文件包含 当 make 读取到 include 关键字的时候,会暂停读取当前的 Makefile,而是去读 include 包含的文件,读取结束后再继读取当前的 Makefile ...

  4. 浅显易懂 Makefile 入门 (08)— 默认 shell (/bin/sh)、命令回显、make参数(-n 只显示命令但不执行,-s 禁止所有回显)、单行命令、多行命令、并发执行

    1. shell 相关 1.1 默认 shell Makefile 所使用的命令是由 shell 命令行组成,他们是一条一条执行的. 多个命令之间要使用分号隔开,Makefile 中的任何命令都要以 ...

  5. 浅显易懂 Makefile 入门 (07)— 其它函数(foreach 、if、call、origin )

    1. foreach 函数 foreach 函数定义如下: $(foreach <var>,<list>,<text>) 函数的功能是:把参数 <list&g ...

  6. 浅显易懂 Makefile 入门 (06)— 文件名操作函数(dir、notdir、suffix、basename、addsuffix、addperfix、join、wildcard)

    编写 Makefile 的时候,很多情况下需要对文件名进行操作.例如获取文件的路径,去除文件的路径,取出文件前缀或后缀等等. 注意:下面的每个函数的参数字符串都会被当作或是一个系列的文件名来看待. 1 ...

  7. 浅显易懂 Makefile 入门 (03)— 目标文件搜索(VPATH 和 vpath 的区别和使用)、隐含规则

    1. 目标文件搜索(VPATH和vpath) 如果需要的文件是存在于不同的路径下(即源文件与 Makefile 文件不在同一个路径下),在编译的时候就用到了 Makefile 中为我们提供的目录搜索文 ...

  8. 浅显易懂 Makefile 入门 (02)— 普通变量和自动变量定义、使用($@、$^、$< 作用)、变量覆盖 override、变量的来源 origin

    1. 变量的定义 Makefile 文件中定义变量的基本语法如下: 变量的名称=值列表 变量的名称可以由大小写字母.阿拉伯数字和下划线构成.等号左右的空白符没有明确的要求,因为在执行 make 的时候 ...

  9. 浅显易懂 Makefile 入门 (01)— 什么是Makefile、为什么要用Makefile、Makefile规则、Makefile流程如何实现增量编译

    1. 什么是 Makefile Makefile 文件描述了 Linux 系统下 C/C++ 工程的编译规则,它用来自动化编译 C/C++ 项目.一旦写编写好 Makefile 文件,只需要一个 ma ...

  10. Android 的NDK的Makefile编写

    Android.mk 是google根据Linux GNU Makefile精简编译脚本.具体来说:这就是GNU Makefile的一小部分. 举一个简单例子: LOCAL_PATH := $(cal ...

最新文章

  1. 架构师必看 京东咚咚架构演进
  2. wxpython嵌套panel布局的一个问题
  3. linux下构建Zabbix网络监控平台
  4. Linux用一键安装包快速部署禅道项目管理平台
  5. vba 检查一个文件夹中的文件在另一个文件夹中是否存在(不含扩展名)
  6. MVC与WebForm最大的区别
  7. 怎样将Excel中的数据导入到SQL Server 2000数据库中
  8. Helm 3 完整教程(七):Helm 函数讲解(1)逻辑和流控制函数
  9. 大龄程序员失业后,看他们是如何破局突围的?
  10. 客户跟进中的一些小技巧
  11. php100网站怎么了
  12. 基于Javaweb实现小区物业管理系统
  13. 上海交通大学考研网络安全专业823复习策略
  14. 计算机网络简历技能填写,计算机网络专业个人简历个人技能范文
  15. linux解压img镜像文件,Linux系统上解压或挂载img文件的方法
  16. 为什么Jmeter 运行时时到达持续时间不停止?
  17. 5.2 差模信号、共模信号、共模抑制比
  18. 数据结构----线性表
  19. XML采用Boost::regex解析实例
  20. 关于移动宽带连不上某些网站的解决办法

热门文章

  1. Python中常用的内值方法
  2. BZOJ2301:[HAOI2011]Problem b(莫比乌斯反演,容斥)
  3. mysql中获取一天、一周、一月时间数据的各种sql语句写法
  4. VC++动态链接库(DLL)编程(一)――理解库
  5. Sublime Text 2 和 Verilog HDL
  6. 未来农业科技:物联网如何阻止全球粮荒
  7. REPL (read-evaluate-print-loop)概念-读取评估打印循环
  8. [每日一问]虚拟化网络设计中为什么建议采用链路聚合
  9. Lync 小技巧-46-intranet-共享桌面-internet-网络问题
  10. Oracle 11g必须开启的服务及服务详细介绍