ubuntu下使用gcc和Makefile执行c程序

(一)用gcc直接编译c程序
1.编写c程序
1.1 我喜欢先用vim 创建一个文件:vim+文件名,随便输入内容 ESC+:+wq 保存退出,即可在可视化文件夹里找到刚刚创建的文件
ubuntu下使用gcc和Makefile执行c程序_第1张图片
1.2右键点击open with gedit,编写内容
ubuntu下使用gcc和Makefile执行c程序_第2张图片
ubuntu下使用gcc和Makefile执行c程序_第3张图片
1.3 用cat+文件名的方式查看文件内容,sub1.c就创建好啦
ubuntu下使用gcc和Makefile执行c程序_第4张图片
同理main1.c 和sub1.o如下
在这里插入图片描述
ubuntu下使用gcc和Makefile执行c程序_第5张图片
ubuntu下使用gcc和Makefile执行c程序_第6张图片
2.gcc的使用原理(以Hello.c为例)

指令 编译指令 作用
gcc gcc Hello.c 生成可执行文件.exe(Linux上为.out)
-o gcc Hello.c -o Hello.out(…\Hello.out) 指定生成的文件名(或者指定文件路径)
-E(预处理) gcc -E Hello.c -o Hello.i gcc将对#开头的指令进行解析,并生成*.i文件
-S(编译) gcc -S Hello.i -o Hello.s c源码被编译器转化成汇编代码,并生成*.s文件
-c(汇编) gcc -c Hello.s -o Hello.o 汇编代码转换成机器能执行的二进制代码,并生成*.o文件
gcc *.o(链接) gcc Hello.o -o Hello.out Demo.o虽然已经是机器码,少了链接操作仍无法运行
  1. 【指令】gcc
    使用gcc编译*.c文件可直接生成*.exe(或*。out)
    注意:要进入到Hello.c文件的指定目录下,才能执行gcc命令
    ubuntu下使用gcc和Makefile执行c程序_第7张图片

  2. 【指令】-E(大写)预处理
    gcc将对#开头的指令进行解析,生成*.i文件
    在预处理阶段需要把调用的头文件包含进来,替换宏常量和宏代码段。

    ubuntu下使用gcc和Makefile执行c程序_第8张图片
    查看sub1.i文件内容:
    有好多,只截取了一部分,没怎么看懂ubuntu下使用gcc和Makefile执行c程序_第9张图片

  3. 【指令】-S(大写)编译
    -S指令将*.i文件中的源码转换成汇编代码*.s文件
    ubuntu下使用gcc和Makefile执行c程序_第10张图片

  4. 【指令】-c(小写)汇编
    将*.s中的汇编代码转换成二进制机器码
    ubuntu下使用gcc和Makefile执行c程序_第11张图片

  5. 【指令】gcc *.o
    经过汇编生成的二进制文件sub1.o虽然已经是机器码,但任然无法运行因为少了链接操作。
    ubuntu下使用gcc和Makefile执行c程序_第12张图片

(二)使用Makefile运行
1.Makefile编写规则

target:prerequisites
	command			# command以一个tab键开始

# target为一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label)
# prerequisites是需要生成target所依赖的文件或是目标
# command也就是make需要执行的命令。(任意的Shell命令)

2.示例
ubuntu下使用gcc和Makefile执行c程序_第13张图片

ubuntu下使用gcc和Makefile执行c程序_第14张图片
(三)总结
本次实验加深了我对gcc指令的了解,以及运行c程序背后的详细过程,源程序是如何一步步 编译转换成可执行文件的。

借鉴文章:

不#曾&轻听————Ubuntu系统使用gcc和Makefile编译C程序
大娱乐家cpy————浅显易懂的GCC使用教程——初级篇

你可能感兴趣的:(嵌入式开发,ubuntu,c语言,vim)