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的扩展了。

Makefile注意点总结的更多相关文章

  1. 说说Makefile那些事儿

    说说Makefile那些事儿 |扬说|透过现象看本质 工作至今,一直对Makefile半知半解.突然某天幡然醒悟,觉得此举极为不妥,只得洗心革面从头学来,以前许多不明觉厉之处顿时茅塞顿开,想想好记性不 ...

  2. 编写一个通用的Makefile文件

    1.1在这之前,我们需要了解程序的编译过程 a.预处理:检查语法错误,展开宏,包含头文件等 b.编译:*.c-->*.S c.汇编:*.S-->*.o d.链接:.o +库文件=*.exe ...

  3. 编写简单的Makefile文件

    makefile中的编写内容如下: www:hello.c x.h gcc hello.c -o hello clean: rm hello www:hello.c  x.h 表示生成www这个文件需 ...

  4. 简单编写Makefile

    相信很多朋友都有过这样的经历,看着开源项目中好几页的makefile文件,不知所云.在日常学习和工作中,也有意无意的去回避makefile,能改就不写,能用ide就用ide.其实makefile并没有 ...

  5. [转]Linux中configure/makefile

    本文教你如何使用autoconf.automake等来制作一个以源代码形式(.tar.gz)发布的软件.并可在执行configure时使用自定义参数. 一.概述和基础知识 在Linux下得到一个以源代 ...

  6. Linux内核配置、编译及Makefile简述

    Hi,大家好!我是CrazyCatJack.最近在学习Linux内核的配置.编译及Makefile文件.今天总结一下学习成果,分享给大家^_^ 1.解压缩打补丁 首先是解压缩你获取到的Linux内核. ...

  7. make 查找的文件名顺序为:“GNUmakefile”、“makefile”、“Makefile”

    默认的情况下,make会在工作目录(执行make的目录)下按照文件名顺序寻找makefile文件读取并执行,查找的文件名顺序为:“GNUmakefile”.“makefile”.“Makefile”. ...

  8. 实例:对2个Makefile的备注

    实例1:Makefile编译链接简单.c函数 example.c Makefile exe: example.c gcc example.c -o exe clean: rm exe 执行效果: 实例 ...

  9. Linux中C程序调试、makefile

    gcc基本语法格式:gcc [-选项] 源文件 [-选项] 目标文件,GCC编译C程序的过程: 预处理:gcc -E hello.c hello.i.-E指定执行到预处理结束,下面类似. 编译:gcc ...

  10. Linux工具入门:make工具与Makefile文件

    1. make工具 利用make工具可以自动完成编译工作,这些工作包括: 如果修改了某几个源文件,则只重新编译这几个源文件 如果某个头文件被修改了,则重新编译所有包含该头文件的源文件 利用这种自动编译 ...

随机推荐

  1. UVA - 11774 Doom's Day

    看样例猜结论hhhhhh,竟然蒙对了..(正确性待证明) #include<bits/stdc++.h> #define ll long long using namespace std; ...

  2. DataSnap——利用TParams进行多表事务更新

    DataSnap——利用TParams进行多表事务更新 服务端: function TSVRDM.multUpdatesByPar(UpdateParam: TParams; out ErrMsg: ...

  3. iOS开发 总结几种传值--extern,NSUserDefaults,Delegate

    1 设置委托(代理模式)      建一个委托testViewDelegate.h   #import//b中的参数传到a//设置委托方法,例如本文件//在b中.h描述NSObject * deleg ...

  4. 【魅族Pro7】——BootStrap/JQuery/Canvas/PHP/MySQL/Ajax爬坑之项目总结

    前言:这个项目是我们小组团体合作完成的学习项目,项目使用魅族GUI设计和图片素材,响应式重构Pro7官网的首页.子页.商城及购物车,并加入一些创新.我主要负责的是[画屏子页]的项目,这里作为温故知新, ...

  5. php hex2bin 物联网设备发送十六进制数据

    hex2bin("十六进制字符") 折腾了三天 后来大神一句话搞定 : hex2bin("十六进制字符") 网上有个方向是错误的 就是 "\xAA\x ...

  6. Hibernate4.3.6 Final+Spring3.0.5配置出错提示及解决方法

    1. Caused by: org.hibernate.cache.NoCacheRegionFactoryAvailableException: Second-level cache is used ...

  7. apue学习笔记(第十章 信号)

    本章先对信号机制进行综述,并说明每种信号的一般用法. 信号概念 每个信号都有一个名字,这些名字都以3个字符SIG开头.在头文件<signal.h>中,信号名都被定义为正整形常量. 在某个信 ...

  8. 跨域用ajax处理并返回处理状态

    <script type="text/javascript">        $(function () {            $("#submitBtu ...

  9. 解析iscroll-小demo

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name ...

  10. php减少损耗的方法之一 缓存对象

    即把实例后的对象缓存起来(存入变量),当需要再次实例化时,先去缓存里查看是否存在.存在则返回.否则实例化.