Chinaunix首页 | 论坛 | 博客
  • 博客访问: 532611
  • 博文数量: 150
  • 博客积分: 5010
  • 博客等级: 大校
  • 技术积分: 1861
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-17 00:19
文章分类

全部博文(150)

文章存档

2011年(1)

2009年(14)

2008年(135)

我的朋友

分类: LINUX

2008-04-03 19:12:42

3.4 Makefile介绍

  【参考中文 Makefile 的教程】
  【参考linux programming unleashed 的第四章】

                                                              nd
  【参考Beginning linux programming 2 的8.2】

3.4.1 使用make 的原因

重要性:什么是makefile?或许很多Winodws 的程
序员都不知道这个东西,因为那些Windows 的IDE
都为你做了这个工作,但我觉得要作一个好的和
professional 的程序员,makefile 还是要懂。

好处:makefile 带来的好处就是——“自动化编
译”,一旦写好,只需要一个make 命令,整个工
程完全自动编译,极大的提高了软件开发的效率。

定 :make 是一个命令工具,是一个解释makefile
中指令的命令工具,一般来说,大多数的IDE都有
这个命令,比如:Delphi 的make,Visual C++的
nmake,Linux               GNU 的make。可见,makefile都
成为了一种在工程方面的编译方法。

Make 和makefile 的关系:make命令执行时,需要
一个 Makefile 文件(好比makefile的配置文件),
以告诉make命令需要怎么样的去编译和 接程序。

默认的情况下,make 命令会 当前目录 按顺序找
寻文件名为 “GNUmakefile”、 “makefile”、
  “Makefile”的文件,找到了解释这个文件。 这
三个文件名中,最好使用“Makefile”这个文件
名,因为,这个文件名第一个字符为大写,这样有
一种显目的感觉。最好不要用“GNUmakefile”,
这个文件是GNU 的make 识别的。有另外一些make
只对全小写的“makefile”文件名敏感,但是基本
上来说,大多数的make 都支持“makefile”和
  “Makefile”这两种默认文件名。【三个可能的
makefile 的名字】

3.4.2 编写makefile

3.4.2.1 举例

――――――――――――――――――
foo.o :    foo.c    defs.h         # foo模块
      gcc    -c    foo.c

――――――――――――――――――
程序源代码编写完成后,输入make就可以完成程序
的编译,得到foo.o文件。

3.4.2.2 总结

makefile是一个文本格式的文件,里面包括了一系
列的规则,由这些规则来告诉make命令需要编译哪
些文件,以及怎样编译这些文件。

――――――――――――――――――
target : dependency dependency [...]
command
command
 [...]
――――――――――――――――――

三个关键字的解析:
target 也就是一个目标文件,可以是ObjectFile,
也可以是执行文件。还可以是一个标签 (Label),
对于标签也可以称为“伪目标”。
dependency 就是,要生成那个target所需要的文
件或是目标。即target所依赖的东西。
command 也就是make 需要执行的命令。(任意的
Shell命令)

这是一个文件的依赖关系,也就是说,target这一
个或多个的目标文件依赖于dependency中的文件,
其生成规则定                       command 中。

说白一点就是说,dependency 中如果有一个以上的
文件比target文件要新的话,command所定 的命
令就会被执行。这就是Makefile 的规则。也就是
Makefile 中最核心的内容。
工作过程:make  会比targets  文件和
prerequisites  文件的修改 日期,如果
prerequisites 文件的日期要比targets文件的日
期要新,或者target不存 的话,那么,make 就
会执行后续定 的命令。

3.4.2.3 一个复杂一些的举例

――――――――――――――――――――――――
edit : main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
gcc -o edit main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o

main.o : main.c defs.h
gcc -c main.c

kbd.o : kbd.c defs.h command.h
gcc -c kbd.c

command.o : command.c defs.h command.h
gcc -c command.c

display.o : display.c defs.h buffer.h
gcc -c display.c

insert.o : insert.c defs.h buffer.h
gcc -c insert.c

search.o : search.c defs.h buffer.h
gcc -c search.c

files.o : files.c defs.h buffer.h command.h
gcc -c files.c

utils.o : utils.c defs.h
gcc -c utils.c

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


=================
输入make 会生成edit程序,而输入make clean,
则会删除所有文件,包括edit 和中间的目标代码
文件。

这里要说明一点的是,clean不是一个文件,它只
不过是一个动作名字,有点像C语言中的lable一
样,其冒号后什么也没有,那么,make 就不会自动
去找文件的依赖性,也就不会自动执行其后所定
的命令。要执行其后的命令,就要 make 命令后
明显得指出这个lable 的名字。这样的方法非常有
用,我们可以 一个makefile 中定 不用的编译
或是和编译无关的命令,比如程序的打包,程序的
备份,等等。【clean这个特殊的伪目标】

=======================================
 共产主义实现理论已经诞生!


   共产主义实现技术已经存在!
  
   干革命靠的是毛泽东思想
  建设共产主义靠的是公益思想!





自我介绍:
 共产主义社会模型的创立者,共产主义社会建设的设计师,公益思想理论的创立者。24岁发现了共产主义实现技术---公益思想理论(证明了公益是共产主义的核心价值观、共产主义社会是公益驱动而不是资本驱动,倡导公益观念、公益思维、公益文化、公益评价体系、公益职业经理人制度、公益系统的建立、公益政党的建设,公益改革的方向,提出

社会尽快由商业化、产业化、资本化向公益化转移,国家尽快由以经济建设为中心向追求社会价值最大化的公益建设为中心的重大战略转移!)



共产主义社会就是公益社会,共产主义世界就是公益世界。没有公益观念,没有公益精神,共产主义社会的特征“各尽所能”“各取所需”是空话、是幻想。没有

以追求社会价值最大化的公益企业, 没有公益经理人制度消灭剥削也只是纸上谈兵!

没有完善的公益系统,没有公益社会评价制度,消灭私有制也只是空中楼阁!!

不提倡公益文化,不提倡公益精神文明建设,私有观念的消除也只是一厢情愿!



任何事业都有其科学的规律,现在我正回到我的专业上,学习嵌入式系统开发,



阅读(865) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~