linux应用程序开发入门——初识make工具(2)

  • xidianzxc
  • LV3工程师
  • |      2015-03-03 13:31:02
  • 浏览量 659
  • 回复:1

继续来说说make

接着上篇帖子,我们继续来说说makemake就是linux下的应用程序,用来处理makefile这种文件。在linux中输入make时,将自动寻找名称为“Makefile” 的文件作为编译的处理文件,如果没有名称为”Makefile” 的文件,将继续查找名称为“makefile” 的文件。上一篇帖子中,小菜我使用的名称为小写的名称,即“makefile”,这个可以根据个人习惯。而makefile文件中主要定义的就是生成的目标,生成目标依赖的文件关系和生成目标的方法(也就是相应的命令)。

所以make工具的关键在于书写makefile文件,上次我们简单的介绍一个makefile文件,这次,我们举一个稍微复杂一点的例子。我们假设一个工程的结构如下:

demo1.c 需要demo1.h

demo2.c 需要 demo2.h

demo3.c 需要 demo3.h

mian.c    需要 mian.h

可以看到这个工程有4个源文件和4个头文件,我们如何书写makefile文件,使得make工具能够正确的编译链接这个工程呢,我们来尝试写一下:

linux应用程序开发入门——初识make工具(2)

我们来逐行解释一下这个makefile文件:

1.    第一行,all是我们要生成的目标,冒号后面的4个后缀为.o的是它依赖的4个目标文件,我们知道将目标文件经过编译器的链接就能生成最终的可执行程序。

第二行,这是一条简单的gcc编译命令,忘了的可以看之前的帖子。

2.    第三行,目标文件是main.o,依赖的文件时main.cmain.h

类似的,第四行是生成main.o的命令

3.    下面的demo1.o demo2.o demo3.o main.o的情况类似,而生成这些目标的作用就是因为,在第一行中,生成all需要依赖这些后缀为.o的目标文件。

4.    最后两行的clean目标我们看起来有些不一样,因为它没有依赖文件,这种目标我们叫做伪目标。但是,它依然有自己的生成命令,我们可以看到这是一条删除命令,删除了中间生成的那些目标文件,只保留了最终的all

 

执行这个makefile的过程是这样的:

1.       首先生成目标all需要依赖四个后缀为.o的文件,但是一开始没有这几个文件

2.       紧接着,先执行后面的语句,生成了这四个目标文件,然后all才能生成

3.       最终,因为伪目标clean,删除了生成的后缀为.o4个文件,保留了all

至此,这个例子我们也说完了,可能大家觉得这种处理方法很繁琐,现生成.o文件,再生成最终的all,为什么不直接生成all。是,没错。这里,我只是为了举个例子,水平有限,也可能不是太恰当,只是希望能将makefile说的更清楚一些。这里,我们提到了一个新的东西,就是伪目标,伪目标就是那些没有依赖文件的目标。有什么理解不对的地方,欢迎大家交流~

这个系类的笔记汇总贴在:linux应用程序开发入门笔记系列,欢迎大家交流指正~

 

 

 

 

  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:1
闭上眼睛就是天黑 2015-03-04
谢谢分享
0   回复
举报
发布
x
收藏成功!点击 我的收藏 查看收藏的全部帖子