linux编程入门PPT格式课件下载.ppt
- 文档编号:14314340
- 上传时间:2022-10-22
- 格式:PPT
- 页数:28
- 大小:175.50KB
linux编程入门PPT格式课件下载.ppt
《linux编程入门PPT格式课件下载.ppt》由会员分享,可在线阅读,更多相关《linux编程入门PPT格式课件下载.ppt(28页珍藏版)》请在冰豆网上搜索。
接着进入Vi命令模式的主界面,此时按A键进入插入模式,注意界面最左下面一行的提示信息变成了插入3:
接下来输入我们的源代码,方法和任何文本编辑器一样,编辑好的HelloWorld.c,可以发现Vi自动将一些关键字涂上了不同的颜色。
4:
编辑好源文件后,就需要保存它。
首先按Esc键,从插入模式退回命令模式,接着按:
键进入末行模式,此时输入wq并按回车,则存盘并保存。
Vi的常用命令(命令模式),插入模式的常用命令,末行命令模式的常用命令,C语言编译器gcc的使用,Linux系统上运行的GNUC编译器(GCC)是一个全功能的ANSIC兼容编译器,虽然GCC没有集成的开发环境,但堪称是目前效率很高的C/C+编译器使用gcc通常后跟一些选项和文件名来使用GCC编译器.gcc命令的基本用法如下:
gccoptionsfilenames命令行选项指定的操作将在命令行上每个给出的文件上执行,下面举个简单的例子,编译我们上一节编写的HelloWorld.c源文件:
intmain(intargc,char*argv)printf(HelloLinuxn);
gccoHelloWorldHelloWorld.c此时会在原目录下看到生成了可执行文件HelloWorld,要看到程序输出结果,则只要输入./HelloWorld即可。
头文件和系统求助,有时候我们只知道一个函数的大概形式,不记得确切的表达式,或者是不记得着函数在那个头文件进行了说明.这个时候我们可以求助系统.比如说我们想知道fread这个函数的确切形式,我们只要执行manfread系统就会输出着函数的详细解释的.和这个函数所在的头文件说明了.如果我们要write这个函数的说明,当我们执行manwrite时,输出的结果却不是我们所需要的.因为我们要的是write这个函数的说明,可是出来的却是write这个命令的说明.为了得到write的函数说明我们要用man2write.2表示我们用的write这个函数是系统调用函数,还有一个我们常用的是3表示函数是C的库函数.记住不管什么时候,man都是我们的最好助手.,gcc选项,当你不用任何选项编译一个程序时,GCC将会建立(假定编译成功)一个名为a.out的可执行文件.例如,下面的命令将在当前目录下产生一个叫a.out的文件:
gcctest.c你能用-o编译选项来为将产生的可执行文件指定一个文件名来代替a.out.例如,将一个叫count.c的C程序编译为名叫count的可执行文件,你将输入下面的命令:
gcc-ocountcount.c/其中count为文件count.c编译成功后可执行文件的名字,常用选项含义,-cGCC仅把源文件编译为目标代码。
-static链接静态库,即执行静态链接。
-OGCC对源代码进行基本优化。
这些优化在大多数情况下都会使程序执行得更快。
-On指定代码优化的级别为n,n为0,1,2,3中的一个。
如-O2选项告诉GCC产生尽可能小和尽可能快的代码。
-g在可执行程序中包含标准调试信息。
-pedantic允许发出ANSI/ISOC标准所列出的所有警告。
-wall允许发出GCC所提供的所有有用的警告。
-MM输出一个make兼容的相关列表。
-v显示编译过程中的每一步用到的命令。
-L指定所用函数库的路径。
如果我们所用到的函数库是系统默认的函数库,则不需要指定路径系统的默认的三个函数库是/lib;
/usr/lib;
/usr/local/lib。
如果我们使用的函数不在这默认库中,就要用到-L选项了。
例如:
#gccomytestmytest.cL/home/zsb/lib,makefile文件的编写,为什么要编写makefile文件make是所有想在Linux系统上编程的用户必须掌握的工具。
如果你写的程序中没有用到make,则说明你写的程序只是个人的练习程序,不具有任何实用的价值”。
make实在是应该用在任何稍具规模的程序中的。
下面就举个简单的例子来说明原因。
假设我们有下面这样的一个程序,源代码如下,/*main.c*/#includemytool1.h#includemytool2.hvoidmain()mytool1_print(hello);
mytool2_print(hello);
/*mytool1.h*/#ifndef_MYTOOL_1_H#define_MYTOOL_1_Hvoidmytool1_print(char*print_str);
#endif,/*mytool1.c*/#includemytool1.hvoidmytool1_print(char*print_str)printf(Thisismytool1print%sn,print_str);
/*mytool2.h*/#ifndef_MYTOOL_2_H#define_MYTOOL_2_Hvoidmytool2_print(char*print_str);
#endif/*mytool2.c*/#includemytool2.hvoidmytool2_print(char*print_str)printf(Thisismytool2print%sn,print_str);
当然由于这个程序是很短的我们可以这样来编译gcc-cmain.cgcc-cmytool1.cgcc-cmytool2.cgcc-omainmain.omytool1.omytool2.o,这样的话我们也可以产生main程序,而且也不是很麻烦.但是如果我们考虑一下如果有一天我们修改了其中的一个文件(比如说mytool1.c)那么我们难道还要重新输入上面的命令?
也许你会说,这个很容易解决啊,我写一个SHELL脚本,让她帮我去完成不就可以了.是的对于这个程序来说,是可以起到作用的.但是当我们把事情想的更复杂一点,如果我们的程序有几百个源程序的时候,难道也要编译器重新一个一个的去编译?
为此,聪明的程序员们想出了一个很好的工具来做这件事情,这就是make.我们只要执行一下make,就可以把上面的问题解决掉.在我们执行make之前,我们要先编写一个非常重要的文件.-Makefile.对于上面的那个程序来说,可能的一个Makefile的文件是:
#这是上面那个程序的Makefile文件main:
main.omytool1.omytool2.ogcc-omainmain.omytool1.omytool2.omain.o:
main.cmytool1.hmytool2.hgcc-cmain.cmytool1.o:
mytool1.cmytool1.hgcc-cmytool1.cmytool2.o:
mytool2.cmytool2.hgcc-cmytool2.c,有了这个Makefile文件,不过我们什么时候修改了源程序当中的什么文件,我们只要执行make命令,我们的编译器都只会去编译和我们修改的文件有关的文件,其它的文件她连理都不想去理的。
makefile的基本规则,既然makefile文件这么重要,那么就让我们一步步来学习makefile的一些知识首先我们看一下makefile文件的结构。
makefile文件里主要是有关哪些文件(target目的文件)是从哪些别的文件(dependencies依靠文件)中产生的,用什么命令来进行这个产生过程。
有了这些信息,make会检查硬盘上的文件,如果目的文件的时间戳(该文件生成或被改动时的时间)比至少它的一个依靠文件旧的话,make就执行相应的命令,以便更新目的文件。
(目的文件不一定是最后的可执行档,它可以是任何一个文件),makefile一般被叫做“makefile”或“Makefile”。
当然你可以在make的命令行指定别的文件名。
如果你不特别指定,它会寻找makefile”或“Makefile”,因此使用这两个名字是最简单的。
在Makefile中也#开始的行都是注释行。
Makefile中最重要的是描述文件的依赖关系的说明。
一般的格式是:
target:
componentsTABrule,第一行表示的是依赖关系。
第二行是规则.比如说我们上面的那个Makefile文件的第二行main:
main.omytool1.omytool2.o表示我们的目标(target)main的依赖对象(components)是main.omytool1.omytool2.o当倚赖的对象在目标修改后修改的话,就要去执行规则一行所指定的命令.就象我们的上面那个Makefile第三行所说的一样要执行gcc-omainmain.omytool1.omytool2.o注意规则一行中的TAB表示那里是一个TAB键,若缺少系统则会提示错误“*missingseparator.stop”,这是许多初学者容易忽略的地方,要注意!
makefile变量,上面提到makefiles里主要包含一些规则。
它们包含的其它的东西是变量定义。
makefile里的变量就像一个环境变量(environmentvariable)。
事实上,环境变量在make过程中被解释成make的变量。
这些变量是大小写敏感的,一般使用大写字母。
它们可以从几乎任何地方被引用,也可以被用来做很多事情,比如:
1.贮存一个文件名列表。
在上面的例子里,生成可执行文件的规则包含一些目标文件名做为依靠。
在这个规则的命令行里同样的那些文件被输送给gcc做为命令参数。
如果在这里使用一个变数来贮存所有的目标文件名,加入新的目标文件会变的简单而且较不易出错2.贮存可执行文件名。
如果你的项目被用在一个非gcc的系统里,或者如果你想使用一个不同的编译器,你必须将所有使用编译器的地方改成用新的编译器名。
但是如果使用一个变量来代替编译器名,那么你只需要改变一个地方,其它所有地方的命令名就都改变了。
3.贮存编译器旗标。
假设你想给你所有的编译命令传递一组相同的选项(例如-Wall-O-g);
如果你把这组选项存入一个变量,那么你可以把这个变量放在所有呼叫编译器的地方。
而当你要改变选项的时候,你只需在一个地方改变这个变量的内容。
要设定一个变量,你只要在一行的开始写下这个变量的名字,后面跟一个=号,后面跟你要设定的这个变量的值。
以后你要引用这个变量,写一个$符号,后面是围在括号里的变量名。
下面举一个简单的例子,其作用和gccWallOgtesttest.c是一样的:
CFLAGS=-Wall-Oggcc$(CFLAGS)testtest.c,Makefile有三个非常有用的变量.分别是$,$,$代表的意义分别是:
$-目标文件,$-所有的依赖文件,$-第一个依赖文件.如果我们使用上面三个变量,那么我们可以简化我们的Makefile文件为:
#这是简化后的Makefilemain:
main.omytool1.omytool2.ogcc-o$main.o:
main.cmytool1.hmytool2.hgcc-c$mytool1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux 编程 入门