【linux】vi、gcc、make

举报
开心星人 发表于 2022/11/22 20:34:38 2022/11/22
【摘要】 @toc vi1、调用vivi filename2、vi的三种模式Command(命令)模式,用于输入命令;Insert(插入)模式,用于插入文本;Visual(可视)模式,用于可视化的的高亮并选定正文。3、文件的保存和退出Command模式是vi的默认模式,如果处于其它模式时,要通过ESC键切换过来,接着再输入:号时,vi会在屏幕的最下方等待输入命令;:w 保存;:w filename 另...

@toc

vi

1、调用vi
vi filename

2、vi的三种模式
Command(命令)模式,用于输入命令;
Insert(插入)模式,用于插入文本;
Visual(可视)模式,用于可视化的的高亮并选定正文。

3、文件的保存和退出
Command模式是vi的默认模式,如果处于其它模式时,要通过ESC键切换过来,接着再输入:号时,vi会在屏幕的最下方等待输入命令;

:w 保存;
:w filename 另存为filename;
:wq! 保存退出;
:wq! filename 注:以filename为文件名保存后退出;
:q! 不保存退出;
:x 应该是保存并退出 ,功能和:wq!相同

4、光标移动;
按ESC进入Command模式后,可以用上下左右键来移动光标;

5、进入插入模式

i 在光标之前插入;
a 在光标之后插入;
I 在光标所在行的行首插入;
A 在光标所在行的行末插入;
o 在光标所在的行的上面插入一行;
O 在光标所在的行的下面插入一行;
s 删除光标后的一个字符,然后进入插入模式;
S 删除光标所在的行,然后进入插入模式;

一般记住i就可以了

6、文本内容的删除

x 删除一个字符;
#x 删除几个字符,#表示数字,比如3x;
dw 删除一个单词;
#dw 删除几个单词,#用数字表示,比如3dw表示删除三个单词;
dd 删除一行;
#dd 删除多个行,#代表数字,比如3dd 表示删除光标行及光标的下两行;
d$ 删除光标到行尾的内容;
J 清除光标所处的行与上一行之间的空格,把光标行和上一行接在一起;

一般记住xdd就可以了

gcc

Linux下编辑好的C语言程序,需要使用gcc编译工具(Linux系统上一般也可以通过cc别名调用)进行编译连接,生成可执行文件。对于复杂的应用,可能把多个源程序分别编译,最后连接形成执行文件;为了有效管理这类项目,make代码维护工具可以用来定义一系列规则来管理编译连接过程。

Linux下的可执行文件没有特别的后缀名约定,而是通过设置“可执行”属性来区分
另外,Linux默认的执行文件搜索路径也不包括当前目录,所以编译生成的执行文件需要显示指明文件路径来执行(这也就是为什么总是要加上./)。

(1) 简单使用方法
假设一个C语言源程序名为hello.c,根据该文件生成执行文件的最简单命令为:
gcc hello.c
该命令将生成默认名字为a.out的执行文件;如果希望生成执行文件的名字不同,可以在命令中通过参数指定:
gcc -o hello hello.c
该命令将生成名字为hello的执行文件。

(2) 分解使用
实际上,gcc所做的工作包括预编译、编译、连接等多个环节,上述简单用法隐含了对这几个环节的调用,如果需要分开调用,可以通过不同的命令行参数指定:

gcc -E hello.c -o hello.i		-E参数指定进行预编译,预处理的宏定义插入到hello.i中;
gcc -c hello.i -o hello.o		-c参数指定编译为目标代码 hello.o,也可以通过源文件直接生成(gcc -c hello.c);
gcc hello.o -o hello			将生成可执行文件,如果由多个源程序文件生成,一般需要在生成时指定多个目标代码模块,例如:gcc hello.o e1.o s2.o -o hello

make

make是一种代码维护工具,在大中型项目中,根据程序各个模块的更新情况,自动的维护和生成目标。

make工具使用的关键是编写高效、简洁、正确的makefile

借助一个简单的例子来说明:假设一个项目hello,依赖于hello.o、e1.o、e2.o,而hello.o依赖于hello.c、hello.h,e1.o依赖于e1.c、hello.h,e2.o依赖于e2.c;这样形成一棵依赖关系树,父节点依赖于子节点。使用make进行维护时,会对这棵树进行一次遍历,如果发现子节点形成的时间晚于父节点形成的时间便开始调用makefile中指定的命令进行维护。针对此例子的makefile示例如下:

hello: hello.o e1.o e2.o 
gcc -o hello hello.o e1.o e2.o 
main.o: hello.c hello.h 
	gcc -c hello.c 
e1.o: e1.c hello.h 
	gcc -c e1.c hello.h 
e2.o: e2.c 
	gcc -c e2.c

makefile放置在与项目源程序文件相同目录中,在该目录中执行make hello或者make命令(命令行未target时会默认使用makefile的第一个target),将会根据makefile中定义的依赖关系依次执行编译、连接各个命令,生成hello执行文件。

根据这些缺省规则,可以在简单情况下不编写makefile使用make工具。
例如,对于根据hello.c生成hello执行文件的情况,可以直接使用命令
make hello
效果等同于:gcc -o hello hello.c

内容来自《操作系统》实验作业

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。