您的位置:首页 > 运维架构 > Linux

linux_Makefile文件的编写

2015-07-17 18:44 381 查看
1、gcc对hello_linux.c进行编译的过程中实际做了四步工作,分别是预处理、编译、汇编、链接

(1)预处理过程:gcc工具调用预处理工具cpp将源代码中的宏定义、头文件包含以及条件编译进行替换,替换过的文件仍然是C语言形式的文件,扩展名为.i。

(2)编译过程:gcc把.i文件翻译成汇编语言描述的.s文件,.s文件是汇编语言的语法格式,可用文本编辑器打开。

(3)汇编过程:gcc调用汇编工具as把.s文件翻译成.o的二进制文件,也就是机器代码,称其为目标文件或者目标模块。

(4)链接过程:gcc调用链接工具ld把一个或多个目标.o文件以及它们需要的一些函数库链接成一个完整的可执行文件。

2、gcc 参数

1)–S 只是进行编译不汇编,生成汇编代码

2)-c 只是编译不链接,生成目标代码

3)-o 连接过程

3、gcc编译总结

源文件首先会生成中间目标文件,再由中间目标文件生成运行文件。在编译时,编译器仅仅检测程序语法,和函数、变量是否被声明。假设函数未被声明,编译器会给出一个警告,但能够生成.o文件。而在链接程序时,链接器会在全部的.o文件中找寻函数的实现,假设找不到,那到就会报链接错误码(Linker Error)。

4、Makefile的规则

target … : prerequisites …

command





其中target表示所要生成的.o文件,prerequisites表示生成该文件所依赖的源文件或头文件, command是make要运行的命令(可以是任意的shell命令)。

5、一个简单的例子



1)edit使我们最终要生成的文件,生成该文件就需要:之后的文件,生成edit文件的命令为第二行的命令。

2)假设当前文件夹下没有这些文件,make会在Makefile里找目标为.o文件的依赖性,假设找到则再依据那一个规则生成.o文件。

6、在下面生成.o文件的命令中使用了gcc -c而不是-o命令,原因是-o命令是是一个连接的过程,而此时可能有文件文编译,所以不一定连接上,所以用-c命令仅进行编译,最终在生成edit文件的时候使用-o命令将所生成的.o文件链接到一起生成一个可执行文件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: