MakeFile 学习日记一(C++)makeFile简介

  一、简略说一下为什么要学习Make File,并且把它单独划分作为一个专栏:

        大学学习期间,我对于Make File的理解并不是很深,感觉仅仅只是了解,能看懂这个等级,工作之后,由于我的工作是嵌入式相关的,所以接触的项目很多都是大型的项目,而Make file能否编写,从侧面能够反映出我们是否具备能够完成一个大工程的能力。

        我们能够通过Makefile 文件,来看出一个项目的脉络,如果把一个项目比喻成一个大树,那我认为MakeFile则是去规划树的主体、枝干是如何生长的。

二、什么是Make File?

        在一个工程中,你会发现工程中的源文件不计其数,它们分散在各个目录中。我们通过Makrfile文件定义了一系列规则来指定,去规定那些文件是优先编译的,那些文件是后编译的,甚至进行更加复杂的工作。Makefile文件就像是Shell脚本一样,一旦写好,我们只需要执行make命令,就能够完成整个工程的自动编译,(Make是一个命令工具)。

三、编译和链接

        无论是C还是C++,我们都需要将源代码编译成中间代码文件,在window环境下这种文件后缀为(.obj)在unix/Linux下为(.o)文件,那么生成这个文件的过程,我们称之编译。但是光有这些ObjectFile 是不能够执行程序的,我们还需要将这些Object File合成可执行文件,则这个过程我们称之为链接。

        一般来说每个源文件都会对应一个Objectfile,这样会导致生成的中间文件太多,这样对于编译就会很不方便,因此我们需要将这些中间文件给打包,这样生成的文件就是我们熟知的库文件window中为(.lib),linux下为(.a)文件。

        

四、介绍Makefile

        一、Makefile的规则

target·······:prerequisites······

comamand
·····
·····

        target :是指目标文件。可以是ObjectFile、执行文件、也可以是Lable(标签)(伪目标)。

        prerequisites:是指生成目标文件所需的文件。

        Comamand:是Make需要执行的命令(shell语句)。

这里我们能够看出一个依赖的关系,target(可能是多个)文件依赖于prerequisites(可能是多个)文件。

五 具体实例

       

edit : main.o kbd.o command.o dislplay,o \
insert.o search.o files.o utils.o 
cc -o edit main.o kbd.o command.o dislplay,o \
insert.o search.o files.o utils.o 

main.o : main.c defs.h
cc -c main.c
kbd.o : kbd.c defs.h
cc -c kbd.c
command.o :command.c defs.h command.h 
cc -c command.c 
display.o :display.c defs.h buffer.h 
cc -c display.c 
insert.o :insert.c defs.h buffer.h 
cc -c insert.c 
search.o :search.c defs.h buffer.h 
cc -c search.c 
files.o :files.c defs.h buffer.h command.h
cc -c files.c 
utils.o :utils.c defs.h buffer.h 
cc -c utils.c 

clean:
rm edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

说明:

        “\”是换行,能养能够提高我们的可读性,我们可以将内容保存在文件为“Makefile”或makefile的文件中,直接在该目录中输入命令“make” 就可以生成edit和中间文件(*.o)。每一个.o文件都有一组依赖文件,而这些 .o 文件也是执行文件edit的依赖文件

        依赖文件:冒号后面那些.c  .h文件

        在我们定义好依赖关系后,我们就需要定义生成目标文件的操作命令,这些操作命令一定是以“Tab”开头

        clean:他不是一个文件,他以一个动作,他是一个常用的命令名字(我们一般都用这个执行rm命令操作),:后面这些就是clean执行的操作

六、make 的工作流程:

        

  1. make 命令会在当前目录下寻找“Makefile”或“makefile”的文件
  2. 如果他找的,他会去找文件中的第一个target(目标文件)。,并将这个文件作为最终的目标文件,如果没有这个个文件,则他会自己生成目标文件。
  3. 当目标文件(edit)存在,他就会去寻找依赖的.o文件,以此类推。

像clean 着用没有被第一个目标文件直接或者间接关联的文件则不会在make的时候自动执行,我们就需要通过 make clean 去执行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值