在Linux中Makefile扮演一个非常重要的角色,我们可以以Linux为平台在上面编写我们需要的C程序代码,

对于C语言来说,Linux是一个非常好的平台来学习、使用、调试、验证C代码的平台,其强大的Vim编辑器,还

有强大的gcc编译工具和gdb的调试工具,对于我们学习C语言都是一个非常重要的工具,我们可以非常清晰的看

清C语言代码的执行过程,可以通过gdb调试工具观察代码的执行方法等等优点,我在这就不一一列举了。

使用 sp max.c   建立一个新的文件:

gcc编译工具:

  I(i)  在光标前插入

  A(a)   在光标后插入

  O    原行上新建一行

  dd  删除一行

   x  删除代码中的一个

  set nu  显示代码行号

  set nonu  取消显示行号

  sp max.c 在源文件中新建一个文件    eg:我在只有一个文件的函数如test.c中新建一个max.c文件,把

       相关的代码放在其中直接在主函数中调用

  ctrl + w + ↑    就是如同上面新建的文件中移动,从一个文件的代码移动到上面一个文件中

  ctrl + w + ↓    就是如同上面新建的文件中移动,从一个文件的代码移动到下面一个文件中

  数字  dd     就是从光标处剪贴几行

  eg: 9 dd    就是从光标处剪贴9行

  p      就是把复制的内容粘贴

  yy   复制一行

  u  撤销上一步操作

  Ctrl+ r  恢复撤销

gg   光标快速回到首部

GG   光标快速回到尾部

  objdump -h test.out    显示文件详细信息

  objdump -s test.out    以十六进制显示文件

  objdump -d test.out    以汇编形式显示文件

:wqa   //保存全部并退出

(1)  gcc text.c -o text.out      //编译text.c 并生成text.out可执行文件

(2)    gcc text.c max.c -o text.out      //编译text.c与max.c 并生成text.out可执行文件

./text.out      //执行text.out文件

执行结果如图所示:

gdb调试工具

  start  开始调试

  p       打印

    eg: p a    打印变量a的值

eg: p *a    打印指针变量*a的值

  n        下一行

  bt       堆栈

  l         (list)列出源代码

  break      设置断点调试

    eg: break  12   在十二行设置断点

  s               (step)进入下一级函数中

  f  1             切换到1堆栈中

  x/6d +地址   从那个地址开始连续打印6个值

  gcc -g text.c -o text.out    //编译text.c文件并生成可执行文件text.out  -g就是生成的可执行文件

支持gdb调试

Makefile函数

新建立一个Makefile文件, vim   Makefile   (文件名开头字母一定要大写)

test.out: t1.0  t2.o main.c

Tab gcc  t1.0  t2.o main.c -o  test.out

t1.o : t1.c

Tab  gcc -c t1.c

t2.o : t2.c

Tab  gcc -c t2.c

注:Tab代表用Tab填充空格

  make执行以下就行了

使用Makefile更方便多用户协调编写代码

  gcc -c max.c  //编译生成.o文件  -c就是支持生成.o文件必须要加的gcc参数

  gcc text.c -o text.i -E  //预处理命令生成.i文件

  gcc text.c -o text.s -S  //编译生成.s汇编文件

Linux中的Makefile的更多相关文章

  1. [转]Linux中configure/makefile

    本文教你如何使用autoconf.automake等来制作一个以源代码形式(.tar.gz)发布的软件.并可在执行configure时使用自定义参数. 一.概述和基础知识 在Linux下得到一个以源代 ...

  2. linux中Makefile文件相关内容

    第一章.概述什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional(专业)的程序员,m ...

  3. GNU linux 中makefile那点事

    转自陈皓: http://bbs.chinaunix.net/viewthread.php?tid=408225 概述—— 什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为 ...

  4. linux 下如何 makefile

    本文目的: 尝试着把makefile讲解清楚.非原创,仅仅是学习笔记和备忘录之用. makefile 的目的和好处: 一个工程中的源文件不计数,其按类型.功能.模块分别放在若干个目录中,makefil ...

  5. Linux 中如何卸载已安装的软件(转载)

            Linux 中如何卸载已安装的软件. Linux软件的安装和卸载一直是困扰许多新用户的难题.在Windows中,我们可以使用软件自带的安装卸载程序或在控制面板中的“添加/删除程序”来实 ...

  6. Linux中的动态库和静态库(.a/.la/.so/.o)

    Linux中的动态库和静态库(.a/.la/.so/.o) Linux中的动态库和静态库(.a/.la/.so/.o) C/C++程序编译的过程 .o文件(目标文件) 创建atoi.o 使用atoi. ...

  7. Linux编程(3) MakeFile

    1. 在Linux中,make工具可以维护程序模块关系和生成可执行程序.它可根据程序模块的修改情况重新编译链接生成中间代码或最终的可执行程序.执行make命令,需要一个名为Makefile的文本文件, ...

  8. Linux中下载、解压、安装文件

    一.将解压包发送到linux服务器上: 1.在windos上下载好压缩包文件后,通过winscp等SFTP客户端传送给linux 2.在linux中通过wget命令直接下载 #wget [选项] [下 ...

  9. 【转】Linux中如何安装.rpm、.tar、.tar.gz和tar.bz2

    我以下面三个包为例:(三个包都在/etc/opt下)A.example-1.2.3-1.rpmB.example-1.2.3-1.tarC.example-1.2.3-1.tar.gz 1.对于rpm ...

随机推荐

  1. Scala 面向接口编程

    1.如果要实现一个接口,前边没有extends关键字就可以使用extends,如果有要使用with关键字 2.Scala 中的接口支持多种继承,类或者抽象类不支持多种继承 3.抽象属性:未被实例化的属 ...

  2. The Sum of 0 for four numbers(拆解加二分思想)

    个人心得:单纯用二分法一直超时,后面发现我的那种方法并没有节省多少时间,后面看了大神的代码,真的是巧妙, 俩个数组分别装a+b,c+d.双指针一个指向最后,从第一个开始想加,加到刚好大于0停止,再看是 ...

  3. vue项目错误集

    1.报错:vue.esm.js?efeb:591 [Vue warn]: Avoid using non-primitive value as key, use string/number value ...

  4. 【转】Java内存与垃圾回收调优

    要了解Java垃圾收集机制,先理解JVM内存模式是非常重要的.今天我们将会了解JVM内存的各个部分.如何监控以及垃圾收集调优. Java(JVM)内存模型 正如你从上面的图片看到的,JVM内存被分成多 ...

  5. mysql之 mysql数据库压力测试工具(mysqlslap)

    mysqlslap是从MySQL的5.1.4版开始就开始官方提供的压力测试工具.通过模拟多个并发客户端并发访问MySQL来执行压力测试,同时提供了较详细的SQL执行数据性能报告,并且能很好的对比多个存 ...

  6. 手机访问PC网站自动跳转到手机网站代码(转)

    4G时代,手机网站已经非常普遍了,一般手机网站都有一个二级域名来访问,比如 m.16css.com 如果手机直接访问www.16css.com 就是PC网站,在手机上浏览电脑版网站体验非常不好. 如果 ...

  7. bzoj 1798 [Ahoi2009]Seq 维护序列seq ——线段树

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1798 先乘后加,就可给加法标记乘上乘法标记. 注意可能有 *0 的操作,所以 pshd 时不 ...

  8. 异常:SQL Error: 1064, SQLState: 42000

    在MySQL中,有很多字符被MySQL保留了.如果你用来做列名或者表名就会出现问题. 我这里出现的问题是采用了order作为表明,这是一个保留字,所以出现问题.

  9. 把Azure专线从Class模式迁移到ARM模式

    前面几篇文章介绍了Azure的ASM模式和ARM模式.很多用户已经在ASM模式下部署了Azure的专线服务,如果部署的应用是ARM模式,或ASM模式和ARM模式都有,就需要把ASM模式的专线迁移到AR ...

  10. 【转】S1 Setup

    概念 S1是eNB和MME之间交换应用层配置数据的接口的名称.它是在建立TNL完成后的第一个S1AP的操作,S1的建立意味着eNB和MME之间之前已经存在的所有应用层数据将被全部清空,所有的数据将被重 ...