我所认识的GNU make(1) -- 概述

make其实是一个软件程序,通过在linux shell下或者windows命令行下调用(以下以linux环境为准),完成对源代码的编译链接,最终生成目标文件(可执行文件,或者软件包等等),这个是主要的功能。另外还可以利用make程序实现其他的功能,如目标文件信息的查询,编译链接所产生的中间文件的清理,软件的安装等等。GNU make是目前用的比较广泛的一种make程序,当然还有其他make程序,但是听说都是大同小异,具体区别我也不是很清楚,这里以GNU make为准。

 

make程序在被调用执行后,会在当前的文件目录下去找包含make规则的文件,这样make才能知道怎样去生成目标文件,这些包含make规则的文件一般都会命名为GNUmakefile, makefile或者Makefile.当然你也可以让make程序去解析自己另外命名的make规则文件(如make -f myMakeFile),但是并不提倡这样,别人不好理解,现在用得比较多的就是Makefile。所以make执行得怎样关键就看Makefile写得怎样。一组好的Makefile可以让你简单地输入一条或者几条命令就能实现你想要的build结果。特别是对于大型工程来说,因为一般linux环境下并不会有像VisualStudio那样高度集成的开发环境,那样占用的资源太多,而且不灵活。


Makefile中包含的make规则的基本形式如下:

target … : prerequisites…
        recipe
        …
        …

其中target是指这条规则的最终目标文件,对于C语言来说,一般就是生成某个.o文件。prerequisite就是指这条规则的先决条件,即要生成目标文件必须要有哪些文件(如某些源文件,头文件,库文件,中间文件等等)。recipe就是make程序传给linux shell的命令(基本可以等同于shell命令脚本),告诉linux系统需要执行那些操作才能生成目标文件,如调用gcc编译器去编译某些源文件。

 

要读懂或者编辑一个Makefile还是比较简单的,并不会太难,Makefile的编辑并不是一门独立的计算机语言,所以里面包含的各种各样的规则还是比较少的。Makefile文件中主要包含以下几个方面:

  1. 就是上面说的make规则,当然上面说的只是最基本的形式,还有很多细节的地方
  2. 变量,包括循环展开变量,非循环展开变量和自动化变量
  3. 条件控制语句,这个比较简单,只要知道C语言的if else语句的,看到了都基本能猜出是什么意思了;
  4. 隐含规则,这个是一个难点,不是很好理解,但是也是make智能的体现,用好了可以让你的Makefile变得很简短,但是可能不好读懂。

 

后面将会对这4个方面细细道来,当然再怎么详细也不如manual详细,而且这也不是简单地将手册搬过来,如果有疑问可以查看GNU manual: http://www.gnu.org/software/make/manual/make.pdf


写这个是本着大家一起学习探讨的目的,阅过的请留下您的宝贵意见,我会及时回复。

--The Magic That Brings Hardware To Life.


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值