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文件链接到一起生成一个可执行文件。
(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文件链接到一起生成一个可执行文件。
相关文章推荐
- 每天一个linux命令(30): chown命令
- linux C进程信息查询
- Linux系统下挂载windows(双系统)的NTFS文件系统
- CentOS系统中常用查看日志命令
- Linux随笔-鸟哥Linux服务器篇学习总结(全)
- CentOS 7 / RHEL 7 上安装 LAMP + phpMyAdmin
- linux下mysql的root密码忘记解决方法:
- 浅析 Linux 初始化 init 系统
- 每天一个Linux命令yes
- Linux为什么最多能分4个四个主分区
- centos最小化安装后再安装图形界面
- linux等待队列wait_queue_head_t和wait_queue_t
- Centos6.4建立本地yum源
- 转 linux目录介绍
- Linux驱动开发必看-Linux启动过程(转)
- 辛星整理3linux笔记,免费下载点,我希望对你有所帮助
- linux的档案权限和目录配置
- Vmware克隆Centos后 重新设置eth0
- linux版本选择
- 在虚拟机安装linux Utunbu 时的问题解决