gcc/g++
是一个编译器。
gcc
和g++
使用操作我们在编译的时候,使用
gcc +文件名
,就会形成一个可执行程序->a.out
。
如果我们想形成自己想要的名字的可执行程序,我们可以用
-o
选项,也就是gcc -o myfile myfile.c
或gcc myfile.c o myfile
,两种都可以,主要是记住-o
后面直接跟我们要的可执行程序的名字。
♥之后我们在使用中,一般使用这种操作来编译程序
我们先看一下我们的代码,然后进行预处理后,然后进行对比
下面是我们的代码.
gcc -E
这个选项表示,从现在开始进行程序的翻译,预处理做完,就停下来。但是我们直接打印在屏幕上就太麻烦了,我们将它形成一个文件,就在使用-o
选项,所以最后的操作就是gcc -E myfile.c -o myfile.i
,就可以形成一个myfile.i
的文件,因为一般进行完预处理之后的文件就是用.i
进行后缀。我们发现这个代码多出来800多行的代码,这个东西就是我们的头文件展开的内容,然后将内容复制到预处理的文件中。
所以这一步叫做头文件的展开
我们发现注释没有了,这一步的操作就是去注释。
我们上面定义过
hello PRINT
,没有None
,所以这一步就是条件编译
因为上面定义
M
是100,所以我们在进行预处理操作的时候,直接将M
换成100,这个操作就是宏定义
操作
-S
:从现在开始进行程序的翻译,当编译做完,就停下来。
gcc -S myfile.i -o myfile.s
,默认形成myfile.s
的文件。
只是把我们自己的代码进行翻译形成二进制文件目标,就是形成
.obj文件
操作:gcc -c myfile.s -o myfile.o
,默认形成.o
文件。
打开文件,就是一堆乱码。
-c
,从现在开始进行程序的翻译,当汇编做完,就停下来。
可以直接进行链接,看下面操作
gcc myfile.o -o myfile
,就形成了可执行程序myfile
。
我们的选项合起来就是
ESc
,就是前三个操作的选项,我们只需要记住,前两个字母是大写就可以了。
我们三个操作形成的文件后缀是 ,
.iso
。一些镜像文件就是iso
,我们不是ios
,记住千万不要记混。
新命令
ldd+可执行程序
,检测这个可执行程序在当前被形成的时候,都依赖那些库
linux
下,进行c
的编写呢?linux
系统默认携带了语言级别的头文件和语言对应的库!libXXXXX.a
(专门让编译器,对用户的程序进行静态链接的)lib.XXXX.so
(专门让编译器,对用户的册程序进行动态链接的)前缀lib XXXX后缀.a
我们去掉前缀,去掉后缀,剩下的就是我们的名字。linux
默认使用的是动态库和动态链接。动态链接
静态链接,我们先用这个命令创建静态链接
gcc myfile.c -o myfile-static -static
我们发现他的体积相差40倍作用,我们就将动静态库的内容讲解的差不多了。
linux
自动化构建工具(make/Makefile
)
make
:是一个命令
makefile
:是一个文件,这个文件在当前的源代码路径下。
demo
。demo
<见见猪跑>先创建一个
Makefile
文件
makefile是一个围绕依赖关系和依赖方法构建的一个自动化编译关系
完成一件事情,必须要有正确的依赖关系和依赖方法
我们上面
makefile
的内容如下图
myfile:myfile.c
这个就是依赖关系,根据myfile.c
依赖文件 ,形成myfile
目标文件。形成myfile
依赖于myfile.c
makefile
在进行从上到下的扫描的,只会进行最开始的目标文件。第二个或者之后的并不会直接实现的.PHONY
作用makefile
,我们的clean
被他修饰,所以我们的clean
可以一直执行,但是在我们形成目标文件,没有被他修饰,在执行完一次后,目标文件是最新的,我们就不能在进行执行了。如果进行修改,就还可以在执行。我们本文将
linux
的编辑器,进行了详细,以及原理的介绍,还讲了动静态库的东西,还有自动化构建工具,希望下来大家自己多多运用,才能掌握,大家一起加油!!!