设为首页
收藏本站
用户名
Email
自动登录
找回密码
密码
登录
注册
快捷导航
平台
Portal
论坛
BBS
文库
项目
群组
Group
我的博客
Space
搜索
搜索
热搜:
shell
linux
mysql
本版
用户
LinuxSir.cn,穿越时空的Linuxsir!
»
论坛
›
Linux 发行版讨论区 —— LinuxSir.cn
›
Debian Linux
›
emacs如何配置GCC编译环境?
返回列表
查看:
1299
|
回复:
5
emacs如何配置GCC编译环境?
[复制链接]
icybird_r
icybird_r
当前离线
积分
504
IP卡
狗仔卡
发表于 2006-8-10 23:55:34
|
显示全部楼层
|
阅读模式
在.emacs中配置如下
(setq compile-command "gcc")
(define-key c-mode-base-map [(f7)] 'compile)
按F7后出现gcc,但是这样需要自己写上文件名,请问在emacs中有哪个变量代表了当前buffer or file name?
具体应该怎么配置,搜索了一把什么都没有..
回复
使用道具
举报
提升卡
置顶卡
沉默卡
喧嚣卡
变色卡
显身卡
chaisave
chaisave
当前离线
积分
2402
IP卡
狗仔卡
发表于 2006-8-11 01:23:33
|
显示全部楼层
try smart-compile.el ?
回复
支持
反对
使用道具
举报
显身卡
rushrush
rushrush
当前离线
积分
666
IP卡
狗仔卡
发表于 2006-8-11 11:34:09
|
显示全部楼层
autotools 我还不会用.. 要学的东西太多了.. 唉..
回复
支持
反对
使用道具
举报
显身卡
pank7.yardbird
pank7.yardbird
当前离线
积分
202
IP卡
狗仔卡
发表于 2006-8-11 17:15:56
|
显示全部楼层
你用make不就可以了:
(setq compile-command "make")
回复
支持
反对
使用道具
举报
显身卡
icybird_r
icybird_r
当前离线
积分
504
IP卡
狗仔卡
楼主
|
发表于 2006-8-11 21:15:11
|
显示全部楼层
???
关键是我现在编译的都是小程序,写Makefile麻烦.直接gcc file.c这样最方便
回复
支持
反对
使用道具
举报
显身卡
pluskid
pluskid
当前离线
积分
1322
IP卡
狗仔卡
发表于 2006-8-11 21:30:06
|
显示全部楼层
就是这类似的
(define-key c-mode-map (kbd "<f7>")
#'(lambda ()
(interactive)
(compile (concat "gcc -Wall "
(buffer-file-name)))))
复制代码
不过还是推荐使用 smart-compile.el ,不管是对于小文件的单独编译还是大工程
的编译都非常方便。
smart-compile.el 提供一个 smart-compile 的函数,它查找当前目录下面有没
有 Makefile ,如果有,则会询问是否使用 make 进行编译。否则,他会通过查
看 smart-compile-alist 来根据当前的文件名以及 major-mode 来得到最合适
的编译命令。
可以在
http://www.emacswiki.org/elisp/smart-compile.el
上面下载到他的最新版本。加载之后就可以通过修改或添加项
目到 smart-compile-alist来实现智能编译了!假如我现在在做一个工程,他
处于 /home/kid/project/foo/下面,我可以这样写:
(add-to-list 'smart-compile-alist
'("/home/kid/project/foo/.*" . "make"))
复制代码
但是这样也有一些问题,比如如果我工程里面分了模块,里面又分了子目录,而
Makefile 是放在工程目录的最顶层的:
project/foo/
|-- Makefile
|-- foo.c
`-- bar/
|-- bar.c
`-- foobar.c
复制代码
那么,假如我现在在编辑 bar.c ,编辑完之后使用 smart-compile 则会调用
make 来进行编译,然而这是不正确的,因为 Makefile 不在这儿。不过,也可
以给 make 指定路径来解决这个问题:
(add-to-list 'smart-compile-alist
'("/home/kid/project/foo/.*" . "make -C /home/kid/project/foo"))
复制代码
其他的也参照设置一下就可以了,在编译命令那里可以使用几个预定义的变量:
- %F 完整的绝对路径(如 /usr/local/bin/netscape.bin)
- %f 除去目录前缀的文件名(如 netscape.bin)
- %n 除去扩展名和目录前缀的文件名(如 netscape)
- %e 扩展名(如 bin)
最后,再把他绑定到一个自己喜欢的快捷键上面就万事大吉了!
(global-set-key (kbd "<f9>") 'smart-compile)
复制代码
另外,那个列表的每一项第二个参数并不一定要是作为 shell 命令运行的字符串,
也可以是一个 lisp 语句,例如,我让他在 muse-mode 的时候使用
muse-project-publish 来进行编译,则可以这么写:
(add-to-list 'smart-compile-alist
'(muse-mode . (call-interactively 'muse-project-publish)))
复制代码
这样,我写到这儿,就可以按一下 F9 ,就发布当前页面了,而不是调用
compile 来进行编译。另外,从他的源代码里面可以看到,如果通过前面查找
Makefile 以及 smart-compile-alist 的办法都没有办法确定如何编译的时候,
他会查看文件的头两个字符,如果是 ``#!'' 的话,则编译命令就是当前文件名,
这个设计与其说是编译,倒不如说是运行了,但是由于 ``#!'' 又是非常灵活的,
所以这也是一个值得利用的地方,但是如果当前文件没有可执行权限的话,这个
命令是会运行失败的,也许可以修改一下,题取出 ``#!'' 后面的命令来作为编
译命令,或者说,这种情况下的编译命令就是为当前文件加上可执行权限。
回复
支持
反对
使用道具
举报
显身卡
返回列表
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
|
注册
本版积分规则
发表回复
回帖后跳转到最后一页
浏览过的版块
Gentoo Linux
Mandriva Linux
Copyright © 2002-2023
LinuxSir.cn
(http://www.linuxsir.cn/) 版权所有 All Rights Reserved.
Powered by
RedflagLinux!
技术支持:
中科红旗
|
京ICP备19024520号
快速回复
返回顶部
返回列表