创建博客 登录  
 加关注
   显示下一条  |  关闭

中原大鱼的博客

工作与生活

 
 
 

日志

 
 

Linux下emacs c/c++环境搭建  

2008-12-21 17:14:06|  分类: 工作或学习体会 |  标签: |字号 订阅

      折腾了一个星期总算把ubuntu下的基于emacs的c/c++开发平台搭建完成,主要使用了cedet、ecb、cscope、scons等;
各插件的功能就不多说了;下面介绍安装步骤:
1.安装emacs和主要的插件:
 sudo apt-get install emacs cedet ecb cscope scons
2.下载常用的插件session.el、color-theme.el放置到/usr/share/emacs/site-lisp目录下;
3.配置emacs脚本,~/.emacs;网上狂搜,最后自己修改下就可以了
;;LOAD_PATH //插件脚本cp到/usr/share/emacs/site-lisp,emacs自动加载;
;;(add-to-list 'load-path' "~/.emacs.d/site-lisp")
;=========================================END==============================================;

;;如果在windows模式加载COLOR_THEME
(cond ((eq window-system 'x)
       (require 'color-theme)
       (color-theme-classic))
      ((eq window-system 'pc)
       (message "In DOS"))
      ((eq window-system 'w32)
       (message "In Windows"))
      ((eq window-system 'mac)
       (message "In Macintosh"))
      (t
       (message "In text")))
;(set-face-background 'default "LightCyan3") ;;设置背景色为 浅青色3
;;LANG
(set-language-environment 'Chinese-GB)
(set-keyboard-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-selection-coding-system 'utf-8)
(modify-coding-system-alist 'process "*" 'utf-8)
(setq default-process-coding-system '(utf-8 . utf-8))
(setq-default pathname-coding-system 'utf-8)
(set-file-name-coding-system 'utf-8)
(setq ansi-color-for-comint-mode t) ;;处理shell-mode乱码,好像没作用
;=========================================END==============================================;

;;MY CUSTOMIZE
(auto-image-file-mode t);打开图片显示功能
(display-time-mode 1);显示时间,格式如下
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(transient-mark-mode t);允许临时设置标记
(setq frame-title-format '("" buffer-file-name "@emacs" ));在标题栏显示buffer名称
(setq default-fill-column 80);默认显示 80列就换行
(set-scroll-bar-mode nil)  ; 取消滚动栏
;;(tool-bar-mode nil)        ; 取消工具栏
(setq default-directory "~/")     ; 设置打开文件的缺省路径
;;(ido-mode t)             ; 打开ido,使打开文件时后面有提示,在emacs23带有ido
(setq visible-bell t)          ; 关闭烦人的出错时的提示声
(setq inhibit-startup-message t) ; 关闭emacs启动时的画面
(setq gnus-inhibit-startup-message t) ; 关闭gnus启动时的画面
(fset 'yes-or-no-p 'y-or-n-p)    ; 按 y 或空格键表示 yes,n 表示 no
(setq mouse-yank-at-point t)    ; 不在鼠标点击的那个地方插入剪贴板内容
(setq kill-ring-max 200)    ; 设置粘贴缓冲条目数量
(setq auto-save-mode nil)    ; 自动保存模式
(setq x-select-enable-clipboard t) ; 允许emacs和外部其他程序的粘贴
;;(setq user-full-name "XXXXXX")
;;(setq user-mail-address "XXXXXX@gmail.com")    ; 设置有用的个人信息,这在很多地方有用。
(setq global-font-lock-mode t)    ; 进行语法加亮。
(setq-default kill-whole-line t) ; 在行首 C-k 时,同时删除该行
(setq show-paren-mode t) ;打开括号匹配显示模式
(setq show-paren-style 'parenthesis) ;括号匹配时可以高亮显示另外一边的括号,但光标不会烦人的跳到另一个括号处。
(setq mouse-avoidance-mode 'animate) ;光标靠近鼠标指针时,让鼠标指针自动让开,别挡住视线。
(setq auto-image-file-mode t) ;让 Emacs 可以直接打开和显示图片
(setq default-major-mode 'text-mode)
; (add-hook 'text-mode-hook 'turn-on-auto-fill) ; 设置缺省主模式是text,,并进入auto-fill次模式.而不是基本模式fundamental-mode
(setq-default auto-fill-function 'do-auto-fill) ; Autofill in all modes;;

(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(display-time) ; 显示时间
(setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
(setq sentence-end-double-space nil)     ; 设置 sentence-end 可以识别中文标点。不用在 fill 时在句号后插入两个空格。
(setq enable-recursive-minibuffers t)     ; 可以递归的使用 minibuffer
(setq scroll-margin 3  scroll-conservatively 10000)
;;防止页面滚动时跳动, scroll-margin 3 可以在靠近屏幕边沿3行时就开始滚动,可以很好的看到上下文。
(setq track-eol t)    ; 当光标在行尾上下移动的时候,始终保持在行尾。
(setq Man-notify-method 'pushy) ; 当浏览 man page 时,直接跳转到 man buffer。
(setq next-line-add-newlines nil)    ; Emacs 21 中已经是缺省设置。按 C-n 或向下键时不添加新行。
(setq speedbar-show-unknown-files t);;可以显示所有目录以及文件
(setq dframe-update-speed nil);;不自动刷新,手动 g 刷新
(setq speedbar-update-flag nil)
(setq speedbar-use-images nil);;不使用 image 的方式
(setq speedbar-verbosity-level 0)
;;(setq time-stamp-active t)
;;(setq time-stamp-warn-inactive t)
;;(setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S chunyu") ; 设置时间戳,标识出最后一次保存文件的时间。
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top) ;让 dired 可以递归的拷贝和删除目录。
;=========================================END==============================================;

;;xcscope
(require 'xcscope)
;; C-c s a             设定初始化的目录,一般是你代码的根目录
;; C-s s I             对目录中的相关文件建立列表并进行索引
;; C-c s s             序找符号
;; C-c s g             寻找全局的定义
;; C-c s c             看看指定函数被哪些函数所调用
;; C-c s C             看看指定函数调用了哪些函数
;; C-c s e             寻找正则表达式
;; C-c s f             寻找文件
;; C-c s i             看看指定的文件被哪些文件include
;=========================================END==============================================;
;加入会话功能
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
(load "desktop")
(desktop-save-mode)
;=========================================END==============================================;


;; c-mode设置
;; c-mode公共设置
(defun my-c-mode-common-hook ()
  (setq default-tab-width 4)
  (setq tab-width 4)
  (setq c-basic-offset 4)
  (hs-minor-mode t))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)

(load-library "hideshow")
(add-hook 'c-mode-hook 'hs-minor-mode)
(add-hook 'c++-mode-hook 'hs-minor-mode)
(add-hook 'java-mode-hook 'hs-minor-mode)
(add-hook 'perl-mode-hook 'hs-minor-mode)
(add-hook 'php-mode-hook 'hs-minor-mode)
(add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)
;;能把一个代码块缩起来,需要的时候再展开
;;  M-x              hs-minor-mode
;;  C-c @ ESC C-s    show all
;;  C-c @ ESC C-h    hide all
;;  C-c @ C-s        show block
;;  C-c @ C-h        hide block
;;  C-c @ C-c toggle hide/show

;; C语言设置
(defun my-c-mode-hook ()
  (c-set-style "cc-mode"))
(add-hook 'c-mode-hook 'my-c-mode-hook)

;; C++设置
(defun my-c++-mode-hook ()
  (c-set-style "stroustrup"))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)

;=========================================END==============================================;

(defun my-c-mode-auto-pair ()
  (interactive)
  (make-local-variable 'skeleton-pair-alist)
  (setq skeleton-pair-alist  '(
    (?` ?` _ "''")
    (?\( ? _ ")")
    (?\[ ? _ "]")
    (?{ \n > _ \n ?} >)))
  (setq skeleton-pair t)
  (local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
  (local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
  (local-set-key (kbd "`") 'skeleton-pair-insert-maybe)
  (local-set-key (kbd "[") 'skeleton-pair-insert-maybe))
(add-hook 'c-mode-hook 'my-c-mode-auto-pair)
(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)
;;输入左边的括号,就会自动补全右边的部分.包括(), "", [] , {} , 等等。
;=========================================END==============================================;


;;cedet ecb安装
(add-hook 'texinfo-mode-hook (lambda () (require 'sb-texinfo)))
    ;; (load-file "~/.emacs.d/site-lisp/cedet-1.0pre4/common/cedet.el")
     (semantic-load-enable-code-helpers)
     (autoload 'speedbar-frame-mode "speedbar" "Popup a speedbar frame" t)
     (autoload 'speedbar-get-focus "speedbar" "Jump to speedbar frame" t)
     (define-key-after (lookup-key global-map [menu-bar tools])
                [speedbar]
                '("Speedbar" .
                speedbar-frame-mode)
                [calendar])

;; 指定semantic临时文件的路径,避免到处都是临时文件
;;(setq semanticdb-default-save-directory "~/backups/emacs")

;;;;C/C++语言启动时自动加载semantic对/usr/include的索引数据库
(setq semanticdb-search-system-databases t)
  (add-hook 'c-mode-common-hook
          (lambda ()
            (setq semanticdb-project-system-databases
                  (list (semanticdb-create-database
                           semanticdb-new-database-class
                           "/usr/include")))))

;; project root path
(setq semanticdb-project-roots
          (list
        (expand-file-name "/")))
;; 避免semantic占用CPU过多
(setq-default semantic-idle-scheduler-idle-time 432000)

;;ecb
;;(add-to-list 'load-path "~/.emacs.d/site-lisp/ecb-2.32")
;;(load-file "~/.emacs.d/site-lisp/ecb-2.32/ecb.el")
(require 'ecb)
(setq ecb-auto-activate nil
          ecb-tip-of-the-day nil
          ecb-tree-indent 4
          ecb-windows-height 0.5
          ecb-windows-width 0.13)
          ecb-auto-compatibility-check nil
          ecb-version-check nil
          inhibit-startup-message t
;;重启Emacs
;;运行M-x ecb-byte-complie编译,可以加快运行速度
;;M-x ecb-show-help看在线帮助
;;M-x customize-option RET ecb-source-path RET设置源码目录

;;设置自动补全
;(defun my-indent-or-complete ()
;   (interactive)
;   (if (looking-at "\\>")
;          (hippie-expand nil)
;          (indent-for-tab-command)))
;(global-set-key [(control tab)] 'my-indent-or-complete)

(autoload 'senator-try-expand-semantic "senator")

(setq hippie-expand-try-functions-list
          '(
                senator-try-expand-semantic
                try-expand-dabbrev
                try-expand-dabbrev-visible
                try-expand-dabbrev-all-buffers
                try-expand-dabbrev-from-kill
                try-expand-list
                try-expand-list-all-buffers
                try-expand-line
                try-expand-line-all-buffers
            try-complete-file-name-partially
            try-complete-file-name
            try-expand-whole-kill
        )
)
;=========================================END==============================================;

;;HOT KEY
;;保留F3、F4、F5、F6、F7、F8 for Xrefactory
(global-set-key [f1] 'shell)                              ; 进入shell
(global-set-key [C-f9] 'gdb)                              ; 调试
(setq compile-command "scons")                            ; 编译
(global-set-key [f9] 'compile)
(global-set-key [f10] 'speedbar)                          ; 启动/关闭speedbar
(global-set-key [C-f11] 'comment-or-uncomment-region)     ; 注释 / 取消注释
(global-set-key [f11] 'c-indent-line-or-region)           ; 格式化代码

(global-set-key (kbd "C-`") 'ecb-goto-window-sources)     ; 切换到ecb sources窗口
(global-set-key [C-tab] 'other-window)                    ; 切换窗口
(global-set-key [M-return] 'delete-other-windows)         ; 关闭其他窗口
(global-set-key "\C-xk" 'kill-this-buffer)                ; 关闭当前buffer
;;(global-set-key (kbd "s-SPC") 'set-mark-command)          ; 改变set mark键
;;(global-set-key (kbd "S-<SPC>") 'set-mark-command) ;用shift+space 来 setmark 了, C-@ 很不好按。

(global-set-key [\C-f12] 'ecb-activate)         ;启用ECB
(global-set-key [\C-S-f12] 'ecb-deactivate)     ;退出ECB
;; 补全命令 右Ctrl+\ 自动补全menu
(global-set-key [M-/] 'hippie-expand)
;;(global-set-key [(control return)] 'senator-complete-symbol);
;;(global-set-key  [(control return)]   'senator-completion-menu-popup)
;(global-set-key "\C-\\" 'semantic-ia-complete-symbol-menu)
(global-set-key [(control return)] 'semantic-ia-complete-symbol-menu)
;=========================================END==============================================;

(custom-set-variables
  ;; custom-set-variables was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 '(ecb-options-version "2.32")
 '(ecb-primary-secondary-mouse-buttons (quote mouse-1--mouse-2)))
(custom-set-faces
  ;; custom-set-faces was added by Custom.
  ;; If you edit it by hand, you could mess it up, so be careful.
  ;; Your init file should contain only one such instance.
  ;; If there is more than one, they won't work right.
 )
;=========================================END==============================================;
4.ecb效果图如下:
Linux下emacs c/c++环境搭建 - yu_hongchang - yu_hongchang的博客
5.scons脚本:
在项目代码目录下建立Sconstruct文件,内容如下;
env = Environment()
#为gdb调试编译时带'-g’参数
env.Append(CCFLAGS='-g')
env.Program('maketest',Glob("*.cpp"))
6.编译按f9,默认编译命令已设置成了scons,回车;
scons
scons: Reading SConscript files ...
scons: done reading SConscript files.
scons: Building targets ...
g++ -o maketest.o -c -g maketest.cpp
In file included from /usr/include/c++/4.2/backward/iostream.h:31,
                 from maketest.cpp:2:
/usr/include/c++/4.2/backward/backward_warning.h:32:2: warning: #warning This file includes at least one deprecated or antiquated header. Please consider using one of the 32 headers found in section 17.4.1.2 of the C++ standard. Examples include substituting the <X> header for the <X.h> header for C++ includes, or <iostream> instead of the deprecated header <iostream.h>. To disable this warning use -Wno-deprecated.
g++ -o maketest maketest.o myproc.o
scons: done building targets.

Compilation finished at Sun Dec 21 17:12:19
7.gdb调试界面:ctrl+f9
Linux下emacs c/c++环境搭建 - yu_hongchang - yu_hongchang的博客



  评论这张
转发至微博
转发至微博
0   分享到:        
阅读(3500)| 评论(5)| 引用 (0) |举报

历史上的今天

相关文章

最近读者

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--相关文章--> <#--历史上的今天--> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2012