初识makefile

               一个C/C++文件要经过预处理(preprocessing),编译(compilation),汇编(assembly),连接(linking)4部才能变成可执行文件,在windows的IDE中只需要点下按钮就能完成以上所有的工作,在Linux下则需要自己编写makefile通过make命令来完成。

 1.预处理

           在C/C++源文件中,以#开头的命令被称为预处理命令,预处理就是要将包含(include)的文件插入源文件中,将宏定义(define)展开,根据条件编译命令(if,ifdef)选择要使用的代码,最后将这些代码输出到一个 .i文件中。

预处理用到arm-linux-cpp工具。

2、编译

           编译就是把上边的  .i文件翻译成汇编代码,用到的工具是cc1

3、汇编

           汇编就是将上边的汇编代码翻译成机器代码,在Linux上是ELF目标文件(OBJ文件),反汇编就是倒过来,把机器码变为汇编。  这一步用到的工具是arm-linux-as

4、连接

           这一步就是将上步生成的OBJ文件和系统库的OBJ文件、库文件连接起来,最终生成可以在特定平台上运行的可执行文件,工具为arm-linux-ld


有了以上的基础就可以来研究下makefile了,Linux中使用make命令来编译程序,而make所执行的动作就是依赖于makefile了,入门C程序helloworld.c的makefile如下:

1、                helloworld:helloworld.c

2、                        gcc -o  helloworld  helloworld.c

3、                clean:

4、                     rm -f  helloworld


将上面4行存入makefile文件,放入对应的目录下,直接执行make就可编译helloworld程序,若执行make clean就可清除编译出来的东西,要是修改过某些文件,make命令可知道修改过的文件,从而再次编译时只编译修改过的文件,和IDE的修改后编译一样。

makefile的规则:

           目标(target)...  : 依赖(prerequiries)...

           <制表符tab>命令(command)

目标:要生成的文件,如OBJ文件,也可以是一个动作,如上边才clean。

依赖:用来生成目标的文件,如源文件,一个目标经常会有几个依赖。

命令:生成目标是执行的动作,一个规则可以含有几个命令,每个命令占一行,前必有一个tab,不能用空格

 

对照上边最简单的那个makefile可看出 有2个目标helloword和clean,前者是个要生成的目标文件,后者是一个动作没有依赖,当依赖发生变动时,执行make后就会执行

gcc -o helloworld helloworld.c  ,否则不会执行,当没有依赖时,就会强制执行,也就是只要make,必回执行clean下面的 rm -f helloword.

             

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值