window下使用各种IDE进行编程,如VS,IAR软件编写代码后可以直接进行编译。Ubuntu下,大多使用VIM编辑器进行代码的编辑,用gcc编译器进行编译。

vim编辑器的使用方法如下:

    1. 终端下输入vi,编辑器会进入下图的默认模式,此时不能进行编辑。
  • 2.记住aio,例如要进入编辑模式的时候,先按a或者是io即可进入到。a是在光标后面输入文字,i是在光标前面输入文字,o代表是下一行输入文字。
  • 3.ctrl+s是暂停vim编辑器,不能进行编辑;ctrl+q是退出暂停。esc按键才是真正的保存。

gcc编译器的介绍

gcc选项 文件名字
-c 只编译不链接,仅仅将输入的.c文件编译为.o文件
-o<输出文件名> 用来指定编译结束后输出的文件名。gcc默认编译出来的可执行文件名为a.out
-g 添加调试信息,如果要使用调试工具(gdb)的话,就必须添加此项,这样编译的时候会生成调试所需的符号信息
-o 对程序进行优化编译,若选择此项的话,整个源码在编译,链接的时候都会进行优化,这样产生的可执行文件执行效率高
-o2 比-o更大幅度的优化,生成的可执行效率更高,但是整个编译过程会很慢
  • GCC编译器的编译流程:
    gcc编译器的编译流程是:预处理->汇编->编译->链接。预处理:对程序中的宏定义等相关的内容进行前期的替换或处理;汇编是将C文件转换成汇编文件,转换成汇编文件以后就是文件编译了。编译过程就是将C源文件编译成.o结尾的目标文件。编译成的.o文件不能直接执行,需要最后的链接。
  • 何为makefile:
    前面介绍了在linux的终端下使用gcc命令来完成c文件的编译。若工程中有几十或上百的文件时,采用在终端输入gcc命令的方法就不现实了。这时候,就要编写一个文件,这个文件描述了编译哪些源码文件,如何编译。每次需要编译工程时只需要使用这个文件就可以了。这时候解决大工程编译的工具:make,描述哪些文件需要编译、哪些需要重新编译的文件就叫做makefile。
  • makefile详细介绍:
    Makefile和脚本文件一样,里面可以执行系统命令,可以完成整个工程的自动编译。Window下的VS或IAR这些IDE软件实际上也是有make的(例如这些软件需要添加要编译的C文件)。只不过这些IDE软件对其进行了封装,提供给使用的是已经经过封装后的图形界面。
  • makefile语法规则的详细介绍:
    makefile里面是由一系列的规则组成的:
目标:  依赖文件集合命令1命令2

注意:命令列表中的每条命令必须是以TAB键开始,不能使用空格。因为make这个工具会为makefile中的每个以TAB开始的命令创建一个shell进程去执行。

  • makefile变量:
    不像C中的变量有int char等各种类型 , makefile中的变量都是字符串,类似C中的宏。
    makefile未使用变量前:
main : main.o input.o calcu.ogcc -o main main.o input.o calcu.o

同样的功能,makefile使用变量后:

#makefile变量的使用:
objects =  main.o input.o calcu.o
main:$(objects)gcc -o main $(objects)
  • 总结:1.makefile使用#进行注释;2.变量名是objects,给赋值字符串“main.o input.o calcu.o”;3. 引用变量时,采用$(变量)。
  • makefile自动化变量:
    自动化变量是通过一行命令来从不同的依赖文件中生成对应的目标。所谓自动化变量就是会把模式中定义的一系列文件自动的挨个去取出,直到所有符合模式的文件都取完。

makefile中的 = ,:=, ?= ,及+= 具体作用解释
= 表示的是最基本的赋值
:= 覆盖之间的值
?= 如果没有赋过值就赋等号后面的值
+= 添加等号后面的值

常用的自动化变量:

自动化变量 描述
$@ 规则中的目标集合,在模式股则中,如果有多个目标的话,$@表示匹配模式中定义的目标集合
$% 当目标是函数库的时候表示规则中的目标成员名,如果目标不是函数库文件,那么其值为空
$< 依赖文件集合的第一个文件,如果依赖文件是以模式(即%)定义的,那么$<就是符合模式的一系列文件集合
$? 所有比目标新的依赖目标集合,以空格分开
$^ 所有依赖文件的集合,使用空格分开。如果依赖文件中有多个重复的文件,$^会去除重复的依赖文件值,白柳一份
$+ 和$^类似,但是当依赖文件重复的话不会去除重复的依赖文件
$* 这个变量表示目标模式中%及之间的部分。如果目标是test/a.test.c,目标模式为a.%.c,$就是test/a.test

**总结:这几个自动化变量中,常用的是三种:$@, < 和 <和 <和^。

$@ 目标文件
$^ 所有依赖文件
$< 第一个依赖文件

== makefile函数使用==
makefile支持函数,但是只支持已经定义好的函数,不支持自定义函数。make下函数的用法:$(函数名 参数集合)或者${函数名 参数集合}。这样话和调用普通变量是相同的。参数集合可能是多个参数,每个参数之间要用,隔开。函数名和参数之间用空格分开。
makefile常用函数举例

  • subst功能:完成字符串替换。举例: $(subst zzk, ZZK,my name is zzk)。执行完这个函数编程my name is ZZK.

  • patsubst 功能: 完成模式字符串替换。举例:$(patsubst %.c,%.o,a.c b.c c.c)。这个函数是将字符串“a.o b.o c.o"中所有符合%.c的字符串,替换成.o。% 是通配符,表示任意长的字符串。

  • dir函数,用来获取目录。$(dir</src/a.c>,是提取文件/src/a.c的目录部分,就是/src.

  • 函数notdir,就是去除文件中的目录部分。$(notdir</src/a.c>)执行完是a.c

  • foreach函数用来循环使用的。$(foreach ,, )
    意思是将list中的单词逐一取出,放到变量var中,然后执行text所包含的表达式。text会将每次返回的字符串用空格分开,组成整个字符串。作为foreach函数的返回值。
    使用举例
    name := a b c
    file := $(foreach n,&(name),&(n).o)。这样会输出a.o b.o c.o 。n = a.o b.o c.o ,n为临时变量,作用域仅在foreach函数里面。

  • wildcard函数: 通配符%只能在规则中使用,且只有在规则中才会展开。在变量定义和函数使用时,通配符不会展开。这时需要使用wildcard函数。使用举例:$(wildcard *.c)是用来获取当前目录下所有的.c文件,类似于%。

Linux下C编程入门和总结相关推荐

  1. Linux下C编程入门

    这里向大家介绍一下在Linux/UNIX 的机器上,进行 C/C++ 编程的一些入门级知识. · 所需具备的背景知识 · 开发所需的基本环境 · 获得帮助的途径 · 通过一个实例了解基本步骤 Prer ...

  2. Linux下串口编程入门

    1. 串口简介 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是 RS-232-C 接口(又称 EIA RS-232-C)它是在 1970 年由美国电子工业协会(EI ...

  3. 【Linux】Linux 下串口编程入门

    目录 串口简介 串口操作 打开串口 设置串口 读写串口 关闭串口 例子 相关主题 串口简介 串行口是计算机一种常用的接口,具有连接线少,通讯简单,得到广泛的使用.常用的串口是 RS-232-C 接口( ...

  4. Linux下C编程入门(7)

    Linux下项目同步工具介绍git和github 一.远程仓库工具github 1. 一.本地操作工具git 1. 转载于:https://www.cnblogs.com/guochaoxxl/p/7 ...

  5. Linux下C编程入门(1)

    Linux系统的介绍(以下以Manjaro最新版为例子): 一.系统的安装: 1.可以直接使用U盘做一个live usb的启动盘,在bios中设置从U盘启动即可拥有linux系统,如果是新式bios需 ...

  6. Linux下的编程入门

    通常情况下,我们从命令行输入命令每输入一次就能够得到系统的一次响应.一旦需要我们一个接着一个的输入命令而最后才得到结果的时候,这样的做法显然就没有效率.要达到这样的目的,通常我们利用shell程序或者 ...

  7. Linux下C编程入门(.h文件,.c文件,以及多文件调用的方式)

    1.首先,以Ubuntu 64-bit操作系统下为例 图中的sudo su表示的是快速进入到root管理员下.这里的密码默认的是安装后的Ubunto操作系统中自定义的用户名的密码,此处以用户toto, ...

  8. linux下C++编程学习

    前言(废话,可略过):之前一直在windows下做C++编程,后来换后台工作接触到linux下C++开发.期间磨磨唧唧浪费了很多时间.记录下历程,给后来的小伙伴提个醒,免得浪费宝贵时间. 一.关于换系 ...

  9. Linux 下串口编程(C++ 程序设计)

    串口通信是最简单的通信方式.即使在USB 非常流行的今天,依然保留了串行通信的方式.网络上已经有大量关于Linux下 C++ 串口编程的文章,但是我依然要写这篇博文.因为网络上的资料不是内容太多,就是 ...

最新文章

  1. 三台主机分别部署LAMP
  2. showModalDialog sesission丢失
  3. 使用Regions ADF 11g进行Master Detail CRUD操作
  4. ModuleNotFoundError: No module named ‘torch.utils.serialization‘解决
  5. 携程去哪儿移动端产品分析报告
  6. 广度优先搜索——岛屿数量(Leetcode 200)
  7. Linux 170个常见问题的详细解答
  8. NGUI_2.6.3_教程五(角色信息跟随)
  9. 图表中如何实现动态变更分类轴与系列值
  10. 解析docker中的环境变量使用和常见问题解决
  11. JSK-8 字符串长度【入门】
  12. python try except continue_python中 try、except、finally执行顺序
  13. 不要奇怪 XP震网病毒缺陷或为2014最大软件漏洞
  14. excle表格导出到本地
  15. 【rmzt:进击的巨人三笠帅气主题】
  16. python正则表达式的学习
  17. Cocos2d-x for XNA:万丈高楼亦可不需平地起
  18. Fedora 17: 安装 perl-Tk
  19. Docker 配置 nvidia-docker 和 pytorch 的一些想法
  20. 笔记本计算机没有声音是怎么回事,笔记本电脑声音没了怎么恢复_笔记本怎么没有声音-win7之家...

热门文章

  1. 学会444句话 英语口语不用愁
  2. Onvif/RTSP摄像头直播中云台控制
  3. FPGA Verilog AD7606驱动代码,包含SPI模式读取和并行模式读取两种
  4. HTML基础知识(1)
  5. Dreamweaver cc 2018精简版
  6. Ubuntu 安装 eyeOS
  7. Python实用案例,Python脚本,Python实现帮你选择双色球号码
  8. 本地服务器收银系统,开酒吧用什么收银系统?
  9. 约租车管理办法近期公布 数量或受地方政府管控
  10. python提取图片感兴趣区域_Python+OpenCV感兴趣区域ROI提取方法