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

    xiaoxiao2025-01-27  8

    编译器( 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文件的其他情况还有待了解与学习......

    转载请注明原文地址: https://ju.6miu.com/read-1295816.html
    最新回复(0)