【linux】浅谈Linux下的gcc编译器和"Makefile"文件

来源:互联网 发布:怎样做网络主播 编辑:程序博客网 时间:2024/05/18 13:07

编译器( gcc 、g++):

预处理—— 取消注释、宏替换、.h文件展开(文件包含)、条件编译 。预处理指令是以#号开头的代码行。
编译    —— c语言->汇编代码
汇编    ——汇编代码 转换为目标文件,机器可识别代码
链接    ——可执行文件(库文件.lib(静态库.a)    .dil(动态库.so))库文件为目标文件
                    静态链接、动态链接。   libc是c语言标准库,gcc为默认动态连接 
静态链接-优点:不限制平台(平台无关性),效率高--缺点:占空间、
动态连接-优点:节省存储空间--缺点:限制平台、效率低,花费时间
编译链接-------
gcc的使用E S c编译 (esc)    后缀 .i  .s  .o (ios径向文件)
选项“-o”是指目标文件               -o 文件件    输出到 ⽂文件
“-E”查看 让 gcc 在预处理结束后停止编译过程  
 “-S”来查看,该选项只编译不汇编,形成汇编代码。
“- c”可看到汇编代码已转化为“.o”的二 进制目标代码
链接----系统把函数实现都被做到名为 libc.so.6 的库文件中去了,gcc会去连接libc.so.6库,实现函数“printf ”。

Makefile:

makefile  定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因 为makefile 就像一个Shell 脚本一样,其中也可以执行操作系统的命令。
make--命令,makefile--当前目录下的文件
$@:目标文件
$^:所有的依赖文件
$<:第一个依赖文件

Makefile文件1:<具体的编译过程包含 .i、.s、.o三类>


Makefile文件2:<省略具体编译过程,直接执行-o操作>

.PHONY是一个特殊的 make 规则,不会生成clean文件,而执行rm client server。
$<   依赖列表中的文件中的一个一个文件拿出来,同时编译为同名不同后缀 




Makefile文件3:<...>

$<   依赖列表中的文件中的一个一个文件拿出来,同时编译为同名不同后缀  



Makefile的运行:

make——编译执行

make clean——清理工程

make debug——调试

Makefile运行的一些错误:

错误问题1:/usr/lib/gcc/i686-redhat-linux/4.4.7/../../../crt1.o: In function `_start': (.text+0x18): undefined

原因:没有main函数。                                            解决方案:添加mian函数并编写main

错误问题:2:Makefile:9: *** missing separator.  Stop.

原因:没有分隔符或许tab键乱用。                        解决方案:检查Tab键,确定Makefile文件以【tab】开始


Makefile文件的其他情况还有待了解与学习......

0 0
原创粉丝点击