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