嵌入式开发|ubuntu下使用gcc和Makefile执行c程序

(一)用gcc直接编译c程序
1.编写c程序
1.1 我喜欢先用vim 创建一个文件:vim+文件名,随便输入内容 ESC+:+wq 保存退出,即可在可视化文件夹里找到刚刚创建的文件
嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
文章图片

1.2右键点击open with gedit,编写内容
嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
文章图片

嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
文章图片

1.3 用cat+文件名的方式查看文件内容,sub1.c就创建好啦
嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
文章图片

同理main1.c 和sub1.o如下
在这里插入图片描述
嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
文章图片

嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
文章图片

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程序
    文章图片

  2. 【指令】-E(大写)预处理
    gcc将对#开头的指令进行解析,生成*.i文件
    在预处理阶段需要把调用的头文件包含进来,替换宏常量和宏代码段。
    嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
    文章图片

    查看sub1.i文件内容:
    有好多,只截取了一部分,没怎么看懂嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
    文章图片

  3. 【指令】-S(大写)编译
    -S指令将*.i文件中的源码转换成汇编代码*.s文件
    嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
    文章图片

  4. 【指令】-c(小写)汇编
    将*.s中的汇编代码转换成二进制机器码
    嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
    文章图片

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

(二)使用Makefile运行
1.Makefile编写规则
target:prerequisites command# command以一个tab键开始# target为一个目标文件,可以是Object File,也可以是执行文件。还可以是一个标签(Label) # prerequisites是需要生成target所依赖的文件或是目标 # command也就是make需要执行的命令。(任意的Shell命令)

2.示例
嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
文章图片

嵌入式开发|ubuntu下使用gcc和Makefile执行c程序
文章图片

(三)总结
本次实验加深了我对gcc指令的了解,以及运行c程序背后的详细过程,源程序是如何一步步 编译转换成可执行文件的。
借鉴文章:
【嵌入式开发|ubuntu下使用gcc和Makefile执行c程序】不#曾&轻听————Ubuntu系统使用gcc和Makefile编译C程序
大娱乐家cpy————浅显易懂的GCC使用教程——初级篇

    推荐阅读