上图为Xcode编译运行原理,接下来我们一起讲解上图:
.c文件是源文件 —编码阶段
.o文件是目标文件 —编译阶段
.out 的文件是可执行文件 —链接之后
讲解之前,我们知道计算机只识别0和1,我们写的代码都需要通过编译器进行编译,转换为计算机可识别的0和1.
首先在xcode中创建一个测试项目:
此时文件还没有执行,当我们按下cmd + r 程序运行,生成可执行文件,如下图:
我们打开这个黑不拉几的test终端:
在终端中出现了程序的结果!
接下来我们自己搞一遍在终端中创建main.c, .o .out 文件
首先在终端中操作,必须了解一些终端的常用命令,整理如下:
pwd 当前所在的位置
ls查看当前文件夹中的内容
cd 进入指定目录
mkdir 文件夹名称 ——创建一个文件夹
rmdir 文件夹名称 ——删除一个文件夹
rm 文件名 ——删除一个文件
cd ../ 返回上一级
clear 清空终端
open文件夹名称——打开一个文件夹
touch文件名称创建一个文件
cat文件名查看文件内容
Xcode4之前,Xcode是用GCC编译器来翻译代码
GCC编译器: 开源免费的编译器, C/OC/C++/Java…
Xcode4之后, LLVM(虚拟机 Clang前端就是专门用来编译代码)
//编译
cc -c 文件名翻译我们自己的代码
//链接
cc 文件名将我们自己的代码和系统以及其依赖文件的代码组合在一
cc -c main.c (将我们自己的代码翻译成0和1)
——> main.i //替换文件中所有的预处理指令
——> main.s //汇编
——> main.o // 二进制
cc main.o
——> 将我们自己的二进制和依赖的文件的二进制组合在一起,生成一个可执行文件
1: 打开终端 输入pwd,表示当前所在的位置
cd desktop 进入桌面,为了模拟xcode编译运行原理,首先我们创建一个test文件夹,用来装执行文件.
这里可以使用终端命令来创建文件夹 mkdir test ,对常用终端命令不熟悉的,可参考上面的一些常用命令
2: 在终端中输入 cd test,进入test文件夹,pwd一下,查看当前的位置,进入这个文件后我们需要创建一个main.c文件
输入命令 touch main.c 会创建一个main.c文件,此时打开test文件夹,会出现一个main.c文件
3: open main.c 命令,用来打开main.c文件,进行编辑
编辑文件的时候,注意: 我们不需要cmd + s保存,因为mac系统编辑文件是自动保存.
4:终端中输入 cc -c main.c 命令,注意test文件中自动生成一个main.o文件,这个文件为目标文件
5: 输入cc main.o 命令.test文件夹中生成一个a.out文件,此文件就是链接文件,所谓链接文件就是自己写的代码转换为二进制后和系统的代码的二进制进行链接,生成一个可执行的a.out文件
6: 最后一步,在命令行中输入 ./a.out ,注意我们刚才写的代码结果出来了! cat main.c命令,来查看main.c文件中的内容
总结:
Xcode编译原理:
步骤:
1: 打开终端
2:找到源文件所在的位置
3: 开始编译:
命令: cc-c main.c
4: 链接
命令: cc main.o
5: 执行
命令: ./a.out
1: 如果只有警告没有错误,那么clang会帮我们翻译代码
如果有错误,那么clang就不会给我们翻译代码
2: clang编译器会帮我们检查警告和错误
3: clang编译只会在链接的时候检查函数有没有真正的实现