Linux下C编程⼊门和总结
window下使⽤各种IDE进⾏编程,如VS,IAR软件编写代码后可以直接进⾏编译。Ubuntu下,⼤多使⽤VIM编辑器进⾏代码的编
辑,⽤gcc编译器进⾏编译。
vim编辑器的使⽤⽅法如下:
1. 终端下输⼊vi,编辑器会进⼊下图的默认模式,此时不能进⾏编辑。
2.记住aio,例如要进⼊编辑模式的时候,先按a或者是io即可进⼊到。a是在光标后⾯输⼊⽂字,i是在光标前⾯输⼊⽂字,o代表是下⼀
⾏输⼊⽂字。
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.o
gcc -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. 引⽤变量时,采⽤$(变量)。
linux下gcc编译的四个步骤makefile⾃动化变量:
⾃动化变量是通过⼀⾏命令来从不同的依赖⽂件中⽣成对应的⽬标。所谓⾃动化变量就是会把模式中定义的⼀系列⽂件⾃动的挨个去取出,直到所有符合模式的⽂件都取完。
makefile中的 = ,:=, ?= ,及+= 具体作⽤解释
= 表⽰的是最基本的赋值
:= 覆盖之间的值
= 如果没有赋过值就赋等号后⾯的值
+= 添加等号后⾯的值
常⽤的⾃动化变量:
⾃动化变量描述
$@规则中的⽬标集合,在模式股则中,如果有多个⽬标的话,$@表⽰匹配模式中定义的⽬标集合
$%当⽬标是函数库的时候表⽰规则中的⽬标成员名,如果⽬标不是函数库⽂件,那么其值为空
$<;依赖⽂件集合的第⼀个⽂件,如果依赖⽂件是以模式(即%)定义的,那么$<;就是符合模式的⼀系列⽂件集合
$?所有⽐⽬标新的依赖⽬标集合,以空格分开
⾃动化变量描述
$^所有依赖⽂件的集合,使⽤空格分开。如果依赖⽂件中有多个重复的⽂件,$^会去除重复的依赖⽂件值,⽩柳⼀份
$+和$^类似,但是当依赖⽂件重复的话不会去除重复的依赖⽂件
$*这个变量表⽰⽬标模式中%及之间的部分。如果⽬标是st.c,⽬标模式为a.%.c,$就是st
<;和
**总结:这⼏个⾃动化变量中,常⽤的是三种:$@, ^。
$@ ⽬标⽂件
$^ 所有依赖⽂件
$< 第⼀个依赖⽂件
== 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⽂件,类似于%。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论