makefile

头文件依赖
http://blog.vjeux.com/category/makefile
http://scottmcpeak.com/autodepend/autodepend.html
http://www.freezhongzi.info/?p=216
依赖解释
http://maskray.me/blog/2011-08-11-generate-dependency-in-makefile

层级makefile
http://blog.csdn.net/hmsiwtv/article/details/20905177

静态库
http://www.cnblogs.com/itech/archive/2009/09/08/1562292.html
动态库
http://www.360doc.com/content/09/0421/19/36491_3216558.shtml

makefile处理
通配符展开
srcs:=$(wildcard *.c)
后缀替换
$(source:.d=.c)
增加前缀
$(source:%=pre%)
增加后缀

$(source:%=%suf)


转义
    当在Makefile中需要使用字符“#”时,可以使用\#来实现
    当在Makefile中需要使用字符“$”时,可以使用$$来实现
    统配符*使用\*转义
    在模式规则中字符‘%’可以用前面加反斜杠“\”方法引用。
    
查找的makefile文件名顺序为

    GNUmakefile、makefile、Makefile。

使用include标示符包含的文件文件查找顺序
    当前文件夹
    命令行选项-I或者--include-dir指定的目录
    /usr/gnu/include
    /usr/local/include
    /usr/include
    -include,sinclude来忽略由于包含文件不存在或者无法创建时的错误提示

共享库查找路径
    当前文件夹
    VPATH vpath”指定的搜索目录。
    /lib /usr/lib /usr/local/lib

多个makefile读取顺序
    make在执行时,首先读取的是环境变量“MAKEFILES”所指定的文件列表,之后才是工作目录下的makefile文件,“include”所指定的文件是在make发现此关键字的时、暂停正在读取的文件而转去读取“include”所指定的文件。

make -t 更新时间戳
make -n 打印命令

所有匹配模式
#sample GNUmakefile 
foo: 
frobnicate > foo 
%: force 
@$(MAKE) -f Makefile $@ 
force: ; 

make如何解析makefile文件
第一阶段:读取所有的makefile文件,内建所有的变量、明确规则和隐含规则,并建立所有目标和依赖之间的依赖关系结构链表。
在第二阶段:根据第一阶段已经建立的依赖关系结构链表决定哪些目标需要更新,并使用对应的规则来重建这些目标。
在make执行的第一阶段中如果变量和函数被展开,那么称此展开是“立即”的,其他的展开称之为“延后”的。

变量及规则的展开
    IMMEDIATE = DEFERRED 
    IMMEDIATE ?= DEFERRED 
    IMMEDIATE := IMMEDIATE 
    IMMEDIATE += DEFERRED or IMMEDIATE 
    define IMMEDIATE 
    DEFERRED 
    Endef 
    ifdeq ifeq是立即的

    所有的规则在make执行时,都按照如下的模式展开:
    IMMEDIATE : IMMEDIATE ; DEFERRED 
    DEFERRED
    规则中目标和依赖如果引用其他的变量,则被立即展开。而规则的命令行中的变量引用会被延后展开。

make的执行过程如下:
    1.  依次读取变量MAKEFILES定义的makefile文件列表
    2.  读取工作目录下的makefile文件(根据命名的查找顺序GNUmakefile,makefile,Makefile首先找到那个就读取那个)
    3.  依次读取工作目录makefile文件中使用指示符“include”包含的文件
    4.  查找重建所有已读取的makefile文件的规则(如果存在一个目标是当前读取的某一个makefile文件,则执行此规则重建此makefile文件,完成以后从第一步开始重新执行)
    5.  初始化变量值并展开那些需要立即展开的变量和函数并根据预设条件确定执行分支
    6.  根据“终极目标”以及其他目标的依赖关系建立依赖关系链表
    7.  执行除“终极目标”以外的所有的目标的规则(规则中如果依赖文件中任一个文件的时间戳比目标文件新,则使用规则所定义的命令重建目标文件)
    8.  执行“终极目标”所在的规则


gcc编译详解
http://www.cnblogs.com/azraelly/archive/2012/07/07/2580839.html
Gcc –E hello.c –o hello.i   预处理,包含头文件,宏展开
Gcc –S hello.i –o hello.s   汇编,生成可阅读的汇编代码
Gcc –c hello.s –o hello.o   生成二进制文件
Gcc hello.o –o hello        生成可执行文件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值