目录
使用GCC编译
编译原理
预处理( -E ) --> 编译( -S ) -----> 汇编( -c ) --> 链接( -o )
.c 源文件 -- .i 预处理后文件-- .s 汇编文件 ---. o目标文件
gcc -E test.c -o test.i //不用 -o 命名会生成 1.out gcc -S test.i -o test.s gcc -c test.s -o test.o gcc -o test.o -o test
内容准备
下载练习用文件
这是学校要求滴
使用命令 git clone , 发现没有安装相应的软件包,下载即可
再次使用 git clone 命令就成功克隆 git 仓库并可以使用了
文件结构树
用命令 tree 即可显示当前文件夹与下层文件结构
编译过程
我有 main.c 、cal( 文件夹 )、show( 文件夹 ),具体看上面的树;
main.c 依赖这两个文件夹里的 .c (main.c 调用了这两个文件的内容,那么 main.c 要成功到汇编需要取决于这两个文件是否成功到汇编,这就有了依赖关系),所以要先让这两个文件夹到汇编;
再把这三个汇编文件链接,生成可执行文件,用 -o run 指令命名为 run ;
用 ./run 运行一下。
使用Makefile
基本知识
基本语法
在终端中使用 make 指令自动编译
Makefile文件是一个纯文本文件,直接在工程目录下创建即可。然后,按照Makefile的书写规则进行书写。规则如下:
target ... : prerequisites ... command ... ...
target 是一个目标文件,比如 .o 或可执行文件,简单的说就是,你想要得到的是什么。
prerequisites 是要生成那个target所需要的文件。
command 是make需要执行的命令。(任意的Shell命令)
clean的语法
在终端中使用 make clean 指令删除文件;
编写 clean 将生成的目标文件和可执行文件删除,将删除命令写在clean下面,要注意一般clean 在文件末尾,不能在文件开头。
这里面是别人的例子:
run: main.o girl.o gcc main.o girl.o -o run girl.o: girl.c gcc -c girl.c -o girl.o main.o: main.c gcc -c main.c -o main.o clean: rm *.o rm run
提升效率
makefile 自动推导
makefile 识别一个 .o 时,会自动推导依赖关系,并自己产生编译命令( 自动帮你写 .c -> .o )
makefile 变量
$(objects) : $ 是变量标志,(objects) 表示替换掉 $ 的内容来自 objects
objects 在第一行就给出了
实际运用
使用 make 生成可执行文件
使用 make clean 清除