linux_Makefile文件的编写

来源:互联网 发布:海思监控软件 编辑:程序博客网 时间:2024/06/05 00:51

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文件链接到一起生成一个可执行文件。

0 0