中易网

如何在GNU Emacs环境下编译并运行C/C++程序

答案:1  悬赏:40  
解决时间 2021-01-25 22:23
如何在GNU Emacs环境下编译并运行C/C++程序
最佳答案
学习C/C++的朋友有没有想过完完全全的在Linux环境下开发软件!?我想过,可能是因为个人对Windows平台有些偏见,或者说个人不是非常喜欢
在Windows下写程序的感觉,总觉得有那么一层膜隔阂着我们,不像Linux,可以做强大的服务器,在终端下只需要使用简简单单的命令便能完成相当复
杂的事情,是不是感觉很高深!?还有很多很多开源项目,Emacs也算一个吧!!!

呵呵,谈到在Linux下编程,我们不得不提这两款编辑器:vi/vim和Emacs(确切的说Emacs的功能已经远远超出了编辑器,使用它我们可能收
发邮件,玩游戏,排版等等)。Emacs的强大不得不让我们对设计出该编辑器的大师们发出崇高的敬意和赞叹,Emacs强大之处不仅仅局限于编辑功能,还
提供的许多自定义选项,还有我们可以不需要动鼠标便可完成日常工作(对于大多数人来说这可能不太现实),下面我只是简要的介绍如何使用Emacs编译/运
行C/C++程序,文中相关命令可以参考本人其他博文。

Emacs有很多版本,如Gnu Emacs、XEmac等等。而且Emacs在各个平台下均能表现的非常出色,前提是你要熟悉它。

首先,再次说明本人所使用的操作系统是rhel 6.2,已经安装GNU Emacs 23.1.1和gcc version
4.4.6,注意Emacs只是一个编辑器,在我们程序员看来(其实我们也可以将其看作IDE,如果使用的比较熟练的话),最起码对于我这种菜鸟来说,还
不能十分熟练的玩转Emacs,它实在是太强大了,以至于有很多知识需要去记忆(不仅仅是快捷键)。

OK,不啰嗦了,下面进入正题:

1.启动Emacs,在终端输入“emacs&”命令后回车(你也可以输入“emacs”命令,不过当你在使用Emacs的时候,当前终端
就不为你工作了;并且如果你熟练使用Emacs的话也可以输入“emacs
-nw”命令以启动非X视窗下的Emacs),至于后面为什么要加一个“&”符,这是Linux里面的基本知识,加上“&”符后会在当前
终端下产生一个子进程以运行Emacs而不会对当前终端的工作造成任何影响,这里我们键入“emacs –nw”命令,启动界面如图1所示;

图1 键入“emacs –nw”命令后,Emacs的启动界面

2.打开/新建文件,进入Emacs界面后,键“C-x
C-f”以打开/创建一个新的文件(如图2所示),建议以C/C++语言里所规定的扩展名来指定创建的文件的扩展名,虽然在Linux下面我们不是十分强
调文件的扩展名,但是如果你选择正当的扩展名的话,将有助于高亮代码,并且Emacs会根据我们创建的文件的扩展名以进行不同语言(要知道,Emacs不
只是为了C/C++程序员设计的)编码风格的缩进;

图2 键“C-x C-f”,输入文件名以打开/创建一个新的文件

3.编辑文件,键“C-x C-s”存盘,本人测试的代码如下:

[cpp] view plain copy
#include

int main( ) {
std::cout << "Hello, Emacs!!!"
<< std::endl;
}

4.编译文件,这里我介绍两种方法。

法1:常规方法,参考Learning Gnu
Emacs,我们可以这样做:键“M-x”,此时在minibuffer中会显示“M-x”字样,输入“compile”命令后默认会显示
“Compile command: make -k”字样,此时把“make -k”删除后,运行相关编译命令(如现在我们应该键入“g++
test.cpp –o test”),如图3所示;

图3 minibuffer下键入“g++ test.cpp –o test”命令以编译源文件

法2:我想大多C/C++程序员会选择第二种编译方法,同样的,键“M-x”,输入“eshell”或“shell”命令,进入“eshell”或
“shell”缓冲区,这里我们键入的命令是“eshell”,然后同样的键入“g++ test.cpp –o
test”命令以编译源文件,如图4所示;

图4 eshell下键入“g++test.cpp –o test”命令以编译源文件

5.运行编译后的可执行文件,同样的按照第4步中的打开eshell缓冲区,输入相关命令即可执行编译后文件,这里我们应该输入“./test”命令,如图5所示。

图5 输入“./test”命令以执行编译后文件

注意:当我们进入其他缓冲区后,再想切换到编辑过的缓冲区可以键入“C-b
buffername”以切换到目的缓冲区。注意编辑(修改)后的缓冲区的名字格式为“*buffername*”,如上面我们切换到
“test.cpp”缓冲区应该buffername应为“test.cpp”,在我们打开“eshell”缓冲区之前我们已将其保存过了,切换到
“test.cpp”后再想切换到之前打开的“eshell”缓冲区的buffername应为“*eshell*”,这个缓冲区我们修改过了;
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
第一次演讲PPT,没有经验,有点紧张,需要注
漠河至黑河的交通
美车领秀汽车服务中心(凰蹲山路店)怎么去啊,
呼延灼怎么死的
这个快递物流正常么? 为什么以前网上买东西
求三孔插座接地是否良好检测电路
猛兽侠里急先锋来到地球的是那集?
针对近视眼的同学越来越多的状况,请低设计一
月薪7500都没安全感 梧州工资多少才敢买房
福建姜小鹰丈夫
在“同住拼房”上面酒店拼房,安全吗?如果是
国内电影评分最高多少
目前挖矿用什么主板好
以我是环保小卫士为题目写一篇作文要求二百字
汝南县公安局老君庙交通管理站地址在什么地方
推荐资讯
为什么我总是那么容易被感动
在《记梁任公先生的一次演讲》中为什么梁启超
eclipse怎么停止java程序
生态学家G.E Gause研究了两种近源原生生物双
如何区别水钢和昆钢
辽源市统计局普查中心地址在什么地方,我要处
聂桥派出所怎么去啊,我要去那办事
招行信用卡中心打电话我没接到怎么办 还能在
一字打头的词语
vivo s7系统能不能升级?
自助式证件照摄影(翠微路12号新华联商业大厦
新手养牛养多大的母牛合适?
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?