设置编辑器

1.TAB键设置为4空格。

首先用vim打开/etc/vim/vimrc文件,这里面发现root用户才能修改vimrc文件,所以用sudo命令暂时切换到root用户。

在vimrc文件最后面,输入set ts =4完成设置。

然后保存,关闭文件。

2.VIM编辑器显示行号。

在上面的文件最后一行加入set nu即可。

编写代码

编译代码

Ubuntu下,C语言编译器是GCC。

使用gcc -v查看GCC编译器版本号。

可知,本机GCC编译器版本为5.4.0。

Ubuntu自带的GCC编译器针对X86架构,只能编译在X86架构CPU上运行的程序。

编译在ARM上运行的程序,需要ARM的GCC编译器。

gcc main.c,编译main.c文件。编译完成以后,生成一个a.out文件,这就是编译生成的可执行文件。使用./a.out,运行可执行文件。

a.out文件的命名,是GCC编译器自动命名的。使用gcc命令时,加上-o,可以指定生成的可执行文件名字。

GCC编译器

gcc命令格式:

gcc [选项] [文件名字]

选项:

-c:只编译不链接为可执行文件,编译器将输入的.c 文件编译为.o 的目标文件。

-o:<输出文件名>指定编译结束以后的输出文件名,如果不使用这个选项,GCC默认编译出来的可执行文件名字为 a.out。

-g:添加调试信息,如果要使用调试工具(如GDB)的话就必须加入此选项,此选项指示编译的时候生成调试所需的符号信息。

-O:对程序进行优化编译,如果使用此选项的话整个源代码在编译、链接的的时候都会进行优化,这样产生的可执行文件执行效率就高。

-O2:比-O 更幅度更大的优化,生成的可执行效率更高,但是整个编译过程会很慢。

GCC编译器,能够检测出错误类型,标记错误发生在哪个文件、哪一行。

GCC编译器编译流程:预处理、编译、汇编、链接。

预处理:展开所有头文件,替换程序中的宏、解析条件编译,并添加到文件中。

编译:将经过预处理的代码编译成汇编代码。

汇编:将汇编语言文件编译成二进制目标文件。

链接:将汇编出来的多个二进制目标文件链接在一起,形成最终的可执行文件。

多个文件的编译

例子:键盘输入两个整形数字,计算他们的和,将结果显示在屏幕上。

//main.c
#include <stdio.h>
#include "input.h"
#include "calcu.h"int main(int argc, char *argv[])
{int a, b, num;input_int(&a, &b);num = calcu(a, b);printf("%d + %d = %d\r\n", a, b, num);
}//input.c
#include <stdio.h>
#include "input.h"void input_int(int *a, int *b)
{printf("input two num:");
scanf("%d %d", a, b);
printf("\r\n");
}//calcu.c
#include "calcu.h"
int calcu(int a, int b)
{return (a + b);
}//input.h
#ifndef _INPUT_H
#define _INPUT_Hvoid input_int(int *a, int *b);
#endif//calcu.h
#ifndef _CALCU_H
#define _CALCU_Hint calcu(int a, int b);
#endif

可以使用下面这个语句对三个文件编译,生成名为main的可执行文件。

gcc main.c calcu.c input.c -o main

编译完之后,执行main,流程如下。

但是以上方法存在问题:1.如果文件数量多,不方便。2.使用上面命令,编译时所有文件会重新编译,耗时多。3.没有修改的文件不需要再次重新编译。

一个解决方法如下:

gcc -c main.c
gcc -c input.c
gcc -c calcu.c
gcc main.o input.o calcu.o -o main

-c选项,只编译不链接。

最后的命令是将所有.o文件链接成可执行文件main。

如果修改input.c文件,只需要将input.c重新编译成.o文件,执行下面两条命令:

gcc -c input.c
gcc main.o input.o calcu.o -o main

但是,存在问题:修改文件多,不知道哪个文件修改过。

Makefile

以上,是通过在终端执行gcc 命令完成C文件的编译。文件很多,上面的方法就不好使了。

Makefile文件,描述哪些文件需要编译或重新编译。

Makefile里面,可以执行系统命令。

使用make命令,可完成整个工程的自动编译。

仍然对于上面的例子:键盘输入两个整形数字,计算他们的和,将结果显示在屏幕上。

创建Makefile文件,输入如下内容:

使用Makefile编译文件的过程如下。

修改了input.c文件之后,再执行make命令,发现只是重新编译了input.c文件。

如果工程没有编译过,工程中所有.c 文件都被编译并且链接成可执行程序。

工程中只有个别C文件被修改,只编译这些被修改的C文件,并且链接成可执行文件。

工程的头文件被修改了,只需要编译所有引用这个头文件的C文件,并且链接成可执行文件。

Linux C文件编译相关推荐

  1. Linux系列学习(二) - Vim编辑器的介绍及使用、文件编译的过程、Makefile工具、Gdb调试器

    目录 引言: 基本命令补充: cat命令: man命令: head命令: tail命令: find命令: grep命令: ​​​​​​​grep命令与管道"|" 的结合使用: ta ...

  2. linux文件 含义,Linux各个文件及其含义

    树状目录结构: 以下是对这些目录的解释: /bin: bin是Binary的缩写, 这个目录存放着最经常使用的命令. /boot: 这里存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及 ...

  3. c 远程编辑linux文件,makefile - 在远程Linux机器上编译C ++ - “检测到时钟偏差”警告...

    makefile - 在远程Linux机器上编译C ++ - "检测到时钟偏差"警告 我通过PuTTY和WinSCP连接到我大学的小型Linux集群,使用后者传输文件,并使用前者编 ...

  4. linux下g编译文件或目录,【转】在linux下使用gcc/g++编译多个.h文件

    博主写得很好 多个文件编译在linux下编译,下面有三个文件,分别是1.cpp 和 2.cpp 和myhead.h 文件. 1.cpp 2.cpp myhead.h 假如他们都在一个目录下面,那么编译 ...

  5. Linux下gcc编译中关于头文件与库文件搜索路径相关问题

    如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:) 原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631 ========== ...

  6. Linux源码编译(一):从头文件说起

    Linux源码编译(一):从头文件说起 2013-04-10 14:37:24 分类: LINUX 在Linux体系结构章节中,主要让大家对Linux结构层次有一定的了解,没有过多的长篇大论,力求简结 ...

  7. linux 多源代码文件编译

    linux 多源代码文件编译 2013-04-10 14:36:28 分类: LINUX 前面一节介绍了Linux下头文件的一些基础知识,有内核头文件和用户空间头文件,但之后的讲解,都是基于用户空间的 ...

  8. 如何编译Linux内核文件

    如何编译Linux内核文件 参考:朱有鹏Uboot的全集 前言:我们的Linux内核文件动则数万个文件,很多个子文件夹,当然是使用Makefile管理了,但是是不是真的仅仅只是make一下就可以了呢? ...

  9. Linux系统中编译大型C语言项目必备技能之:Makefile文件的编写

    文章目录 Makefile的介绍 Makefile的编写规范--简单举例 Makefile的编写规范--复杂举例 项目描述 编译需求 编译思路 Makefile的介绍 我们在阅读一些大型的C语言项目时 ...

最新文章

  1. spell_picture第三版终于摆脱了命令行的操作
  2. Windows系统版本判断
  3. 定时任务scheduleAtFixedRate设定每天某个时刻执行
  4. laravel mysql增删改查_Laravel框架数据库操作的增删改三种方式 阿星小栈
  5. 【C语言】C语言实现面向对象编程之多态
  6. Git撤销修改场景及对应指令(checkout、reset、revert)详解
  7. window程序设计学会_是时候我们学会设计合适的饼图了
  8. java商城_基于Java,jfinal web框架开发出微信商城,微信分销商城源码分享
  9. Mac 登陆Linux云服务器方法
  10. “使用 iNalyzer 分析应用程序的类结构”
  11. python求解最大子序列乘积问题,子序列可连续也可不连续
  12. SpringMvc 最新jar包下载
  13. 福昕编辑器打开pdf自动打印
  14. 启动Solr 8.10 后访问UI报错:CoreContainer is either not initialized or shutting down.
  15. 情有独钟,迷情电子三五年(转贴)想学好电子必看 后悔的找我
  16. 60个前端常用的实现方法(邮箱,手机号,url地址)
  17. 电商 lamp java_搭建LAMP环境部署Ecshop电商网站
  18. 联想服务器维修单据,联想ThinkServer SR650服务器故障维修
  19. [小狼毫]安装,现成的拼音配置方案
  20. 全功能DB数据库管理工具,超赞,完全支持所有主流数据库

热门文章

  1. Winform实现漂亮动画-小火车
  2. STM32——PID恒温控制
  3. VS生成的exe文件如何在其他电脑上运行
  4. Linux Shell编程之脚本执行方式
  5. 如何发布.Net MVC 网站项目(攻略集锦)
  6. 题解P3942_将军令
  7. python databaseoperate_python开发_python操作mysql数据库
  8. php 遮罩层,Jquery实现遮罩层的方法
  9. Win11系统使用Excel表格的时候很卡怎么办
  10. 陌陌怎么发起群活动 陌陌群组发起群活动教程