免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 783 | 回复: 0

MakeFile学习(一) [复制链接]

论坛徽章:
0
发表于 2009-04-09 22:31 |显示全部楼层

                最近在学习MakeFile的编写,所以正在拜读陈皓的《跟我一起写MakeFile》,现在写出一点总结,便于以后复习,也算是一个小小的成果吧。
(一)关于程序的链接和编译
    无论是C、C++首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即 Object File,这个动作叫做编译(compile)。 然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。
    编译时,编译器需要的是语法的正确,函数与变量的声明的正确。 对于后者,通常是你需要告诉编译器头文件的所在位置(头文件中应该只是声明,而定义应该放在C/C++文件中),只要所有的语法正确,编译器就可以编译出中间目标文件。 一般来说,每个源文件都应该对应于一个中间目标文件(O文件或是OBJ文件)。
    链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(O文件或是OBJ文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件(Object File),在大多数时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,这对于编译很不方便,所以,我们要给中间目标文件打个包,在 Windows 下这种包叫“库文件”(Library File),也就是 .lib 文件,在UNIX下,是Archive File,也就是 .a 文件。
    总结一下,源文件首先会生成中间目标文件,再由中间目标文件生成执行文件。 在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现,如果找不到,那到就会报链接错误(Linker Error),在VC下,这种错误一般是:Link 2001错误,意思说是说,链接器未能找到函数的实现。你需要指定函数的Object File.
(二)MakeFile的规则
    target ... : prerequisites ...
    command
    ...
    ...
    target也就是一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标
签(Label)。
    prerequisites就是,要生成那个target所需要的文件或是目标。
    command也就是make需要执行的命令。(任意的Shell命令)
    这是一个文件的依赖关系,也就是说,target 这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。说白一点就是说,prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。
    这就是Makefile的规则。也就是Makefile中最核心的内容。
==================================================================================
关键字:编译、链接、target、prerequisites、command 文件依赖性
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/61062/showart_1895829.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP