emacs工程管理,cedet ede插件自动构建Make,Automake
鉴于自己一直都是在做客户端开发方面的工作,服务端很多知识都随着时间淡忘了,最近有一个计划,用一些时间补一下基础.所以早上很早就起床,花了一点时间大致浏览了一下BSD socket的相关API,然后用GNU C写了一个简单的多线程,阻塞EchoServer.工程的代码倒是不多,就是基于原生API开发,总是有很多的errcode需要处理,比较的烦.所以我干脆就直接写了个宏去处理,简单的输出strerrno(errno)和errno就好.虽然这个宏实现起来比较的简单,但是还是感觉比较的值,节省了不少的代码.而且整体的流程更简单明了.
本来是在写代码的,我是用CMake写的项目组织,当然,就几个文件,用CMake简直就是大材小用.但是也正是在这种情况下,更能体验CMake的强大.我用emacs收邮件的时候就想到了emacs的cedet插件中有个ede工程管理模块,所以就上手折腾了一下.期间浪费了一点时间,浪费在我国伟大的天朝上面,没办法,就是不给下载,后来干脆去github clone了1.1版本的插件包.
可能有一些新手在编译cedet包的时候会遇到一些问题,在编译文档的时候,如果确实需要的话,那么可以 sudo apt-get install texinfo.如果不需要,那么就直接make makeinfo=echo就好了.主要是你有没有在编译之前先查看一下文档,这个就不多说了,是常识.下面是我的cedet配置,很简单,只是配置了一些快捷键,其他的都还没弄,有时间再算吧.
;;------------------------------------------------------------------
;;%% 打开显示行,列模式(行号显示为4位数)
;;------------------------------------------------------------------
(global-linum-mode t)
(column-number-mode t)
(setq linum-format "%4d\u2502") ;;------------------------------------------------------------------
;;%% 关闭图标工具栏,打开ido模式
;;------------------------------------------------------------------
(tool-bar-mode -)
(ido-mode t) ;;------------------------------------------------------------------
;;%% 关闭自动备份设置,关闭自动保存
;;------------------------------------------------------------------
(setq-default make-backup-files nil)
(setq auto-save-default nil) ;;------------------------------------------------------------------
;;%% 使用简单的y/n应答模式
;;------------------------------------------------------------------
(fset 'yes-or-no-p 'y-or-n-p) ;;------------------------------------------------------------------
;;%% 高亮显示拷贝,括号配对
;;------------------------------------------------------------------
(global-font-lock-mode )
(transient-mark-mode )
(show-paren-mode )
(mouse-wheel-mode t) ;;------------------------------------------------------------------
;;%% 设置默认字体,字体大小
;;------------------------------------------------------------------
(set-default-font "Ubuntu Mono-11") ;;------------------------------------------------------------------
;;%% 设置tab缩进格式
;;-----------------------------------------------------------------
(setq indent-tabs-mode nil)
(setq tab-width )
;;------------------------------------------------------------------
;;%% 加载配置color-theme插件
;;------------------------------------------------------------------
(add-to-list 'load-path "~/.emacs.d/color-theme-6.6.0")
(require 'color-theme)
(color-theme-initialize) ;;------------------------------------------------------------------
;;%% 加载配置auto-complete插件
;;------------------------------------------------------------------
(add-to-list 'load-path "~/.emacs.d/auto-complete-1.3.1")
(require 'auto-complete-config)
(add-to-list 'ac-dictionary-directories "~/.emacs.d/ac-dict")
(ac-config-default) ;;------------------------------------------------------------------
;;%% 加载配置yasnippet插件
;;------------------------------------------------------------------
(add-to-list 'load-path "~/.emacs.d/yasnippet")
(require 'yasnippet)
(yas-global-mode ) ;;------------------------------------------------------------------
;;%% 默认启动多窗口调试
;;------------------------------------------------------------------
(setq gdb-many-windows t)
;;------------------------------------------------------------------
;;%% 加载配置tabbar插件,定义快捷键
;;------------------------------------------------------------------
(add-to-list 'load-path "~/.emacs.d/tabbar/")
(require 'tabbar)
(tabbar-mode) (global-set-key (kbd "<M-up>") 'tabbar-backward-group)
(global-set-key (kbd "<M-down>") 'tabbar-forward-group)
(global-set-key (kbd "<M-left>") 'tabbar-backward)
(global-set-key (kbd "<M-right>") 'tabbar-forward) (set-face-attribute 'tabbar-default nil
:family "Ubuntu Mono"
)
(set-face-attribute 'tabbar-button nil
:inherit 'tabbar-default
:box '(:line-width 1 :color "yellow")
)
(set-face-attribute 'tabbar-selected nil
:inherit 'tabbar-default
:foreground "blue"
:background "gray"
:box '(:line-width 1 :color "yellow")
)
(set-face-attribute 'tabbar-unselected nil
:inherit 'tabbar-default
:box '(:line-width 1 :color "yellow")
) ;;------------------------------------------------------------------
;;%% 加载配置cedet插件
;;------------------------------------------------------------------
(add-to-list 'load-path "~/.emacs.d/cedet-1.1/common")
(require 'cedet)
(global-ede-mode )
;;(semantic-load-enable-code-helpers)
(global-srecode-minor-mode ) ;;(semantic-load-enable-minimum-features)
(semantic-load-enable-code-helpers)
;;(semantic-load-enable-gaudy-code-helpers)
;;(semantic-load-enable-excessive-code-helpers)
(semantic-load-enable-semantic-debugging-helpers) (require 'semantic-gcc)
(require 'semantic-ia) (defun my-cedet-hook() (local-set-key [(control tab)] 'semantic-ia-complete-symbol-menu) (local-set-key "\C-c?" 'semantic-ia-complete-symbol-menu)
(local-set-key (kbd "M-/") 'semantic-ia-complete-symbol) (local-set-key "\C-c>" 'semantic-complete-analyze-inline)
(local-set-key (kbd "M-n") 'semantic-complete-analyze-inline) (local-set-key "\C-cp" 'semantic-analyze-proto-impl-toggle)
(local-set-key "\C-cd" 'semantic-ia-fast-jump)
(local-set-key "\C-cr" 'semantic-symref-symbol)
(local-set-key "\C-cR" 'semantic-symref))
(add-hook 'c-mode-common-hook 'my-cedet-hook) ;;%% 配置项目解析tag路径
;; (setq semanticdb-project-roots (list (expand-file-name "/")))
(defconst cedet-user-include-dirs
(list ".." "../include" "../inc" "../common" "../public"
"../.." "../../include" "../../inc" "../../common" "../../public"))
(defconst cedet-win32-include-dirs
(list "C:/MinGW/include"
"C:/MinGW/include/c++/3.4.5"
"C:/MinGW/include/c++/3.4.5/mingw32"
"C:/MinGW/include/c++/3.4.5/backward"
"C:/MinGW/lib/gcc/mingw32/3.4.5/include"
"C:/Program Files/Microsoft Visual Studio/VC98/MFC/Include"))
(require 'semantic-c nil 'noerror)
(let ((include-dirs cedet-user-include-dirs))
(when (eq system-type 'windows-nt)
(setq include-dirs (append include-dirs cedet-win32-include-dirs)))
(mapc (lambda (dir)
(semantic-add-system-include dir 'c++-mode)
(semantic-add-system-include dir 'c-mode))
include-dirs))
;;------------------------------------------------------------------
;; 加载配置ecb插件
;;------------------------------------------------------------------
(add-to-list 'load-path "~/.emacs.d/ecb")
(require 'ecb)
(setq stack-trace-on-error nil)
(setq ecb-tip-of-the-day nil) ;;-------------------------------------------------------------------
下面就来说说ede插件该如何用,首先就是M-x ede- TAB TAB 会弹出buffer 查看ede-*命令,这些命令还是比较容易懂的.先创建一个ede工程项目 : M-x ede-new RET, 按照要求输入,在选择项目类型的时候可以看到提供了好多种的选择,其中需要关注的就是两种:Make,Automake,其他的不属于本文范畴,可以自己去了解.

作为一个例子,我选择的是Automake,并在AutomakePrj下面创建了一个源文件main.c,里面就是一个简单的main入口方法.,输入项目名称也为:AutomakePrj.做完这些之后,还没有生成automake相关的配置,用过automake的都知道,一般都是在Makefile.am和configure.ac中书写配置,用来生成configure,然后生成Makefile.
执行M-x ede-proj-regenerate或者是在emacs menu-bar上面的project中选择->project options->regenerate makefiles.之后由于automake的规范要求还会提示你创建AUTHOR MISSING等一系列的文件,其中有些配置是根据系统变量或者是emacs配置变量自动填充的,需要修改的话自己去改吧.执行的过程是这样子的:

这里也就是automake执行的过程,通常我们也会将前面一些繁琐的步骤写成一个auto_gen.sh的脚本,在一些开发包中也是可以见得到的,这个就顺便提一下.现在是创建了模板,但是还没有添加我们需要编译的target, 相应的也是可以执行M-x ede-add-target, 可供选择的类型也是很多:

这里我就直接选择了生成program.接下来就可以直接执行M-x ede-compile-project了.另外,ede也提供了debug/release模式的选择,很容易切换 M-x ede-project-configuration-set debug|release.如果是启用了debug模式,那么ede还可以直接debug我们的target,我将emacs的debug模式默认设置成为启动gdb-many-windows,所以debug就很容易了.
使用emacs ede工程组织插件的这种管理方式,不推荐直接使用在实际的项目中,更好的选择是自己去使用automake/cmake去组织,二者之间,我倾向的选择是cmake.随便下载一个开源库,搜索其中的CMakeLists.txt就能知道使用cmake是多么的简单了.我这样选择,是因为经常会用C去写一些小项目(或者是算不上项目的散碎程序),自己不喜欢写Makefile,cmake倒是使用的还不错,只是喜欢使用emacs编码慢悠悠的节奏感,这是我的出发点,可能有点荒唐,我也不期望被大多数同行理解.
emacs工程管理,cedet ede插件自动构建Make,Automake的更多相关文章
- docker微服务部署之:五、利用DockerMaven插件自动构建镜像
docker微服务部署之:四.安装docker.docker中安装mysql和jdk1.8.手动构建镜像.部署项目 在上一篇文章中,我们是手动构建镜像,即: 4.1.2.5.1.2.6.1.2中的将d ...
- 工程管理之makefile与自动创建makefile文件过程
(风雪之隅 http://www.laruence.com/2009/11/18/1154.html) Linux Makefile自动编译和链接使用的环境 想知道到Linux Makefile系统的 ...
- Linux CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布
CentOS7下svn+tomcat9.0+maven3.3+jenkins实现web项目自动构建与远程发布 by:授客 QQ:1033553122 目录 一. 实践环境. 1 二. 安装 ...
- 使用BLADE构建c++工程管理
使用BLADE构建c++工程管理 字数764 阅读2753 评论2 喜欢4 一. c++工程依赖管理 之前在百度一直使用comake2构建c++项目,十分方便.免去了手写Makefile的痛苦,很多项 ...
- 使用maven-pom进行依赖管理与自动构建
使用maven-pom进行依赖管理与自动构建 span.kw { color: #007020; font-weight: bold; } /* Keyword */ code > span.d ...
- 使用cmake自动构建工程
公司引擎是用cmake根据目标平台来构建工程的,刚接触的时候深深体会到cmake的方便:如果目标平台是windows,它可以帮你自动构建出vs工程:如果是安卓,自动构建出eclipse工程,如果是IO ...
- Yeoman自动构建js项目
Aug 19, 2013 Tags: bowergruntJavascriptjsnodejsyeomanyo Comments: 10 Comments Yeoman自动构建js项目 从零开始nod ...
- Ant + Jenkies +Tomcat 自动构建部署Web项目
前言:博主资历尚浅,很多东西都还在刚起步学习的阶段,这几天开发任务比较轻,就在自己window系统下,模拟部署远程服务器,利用Jenkies + Ant + Tomcat 搭建了一个自动发布部署的环境 ...
- Gitlab利用Webhook实现Push代码后的jenkins自动构建
之前部署了Gitlab的代码托管平台和Jenkins的代码发布平台.通常是开发后的代码先推到Gitlab上管理,然后在Jenkins里通过脚本构建代码发布.这种方式每次在发版的时候,需要人工去执行je ...
随机推荐
- Atitit. 异常的使用总结最佳实践java .net php Vo8f
Atitit.java 异常的使用总结最佳实践 Vo8f 1. 为什么使用异常 1 2. 用throw抛出一个异常到catch子句中与通过函数调用传递一个参数两者基本相同. 2 3. S E H的主要 ...
- Activemq 平台搭建与C#示列
ActiveMQ ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS ...
- Leetcode 121 Best Time to Buy and Sell Stock 动态规划
由于题意太长,请自己翻译,很容易懂的. 做法:从前向后遍历数组,记录当前出现过的最低价格,作为买入价格,并计算以当天价格出售的收益,作为可能的最大收益,整个遍历过程中,出现过的最大收益就是所求.动态规 ...
- CSS水平垂直居中总结
行内元素水平居中 把行内元素包裹在块级父元素中,且父元素中的css设置text-align:center; <!DOCTYPE html> <html> <head> ...
- "Cannot find one of more components. Please reinstall the application"--安装VS2013之后不能正常打开的处理办法
今天,安装完VS2013之后,不能正常启动.总提示一个让人摸不到头脑的错误: "Cannot find one of more components. Please reinstall th ...
- 如何将Scrapy 部署到Scrapyd上?
安装上传工具 1.上传工具 scrapyd-client 2.安装方法: pip install scrapyd-client 3.上传方法: python d:\Python27\Scripts\s ...
- Scala 深入浅出实战经典 第39讲:ListBuffer、ArrayBuffer、Queue、Stack操作代码实战
王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-64讲)完整视频.PPT.代码下载:百度云盘:http://pan.baidu.com/s/1c0noOt6 ...
- "无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开"解决办法
当程序用ado的jet4.0方式连接mdb数据库的时候,对于设有access数据库密码的mdb的访问居然报错“无法启动应用程序,工作组信息文件丢失,或是已被其他用户已独占方式打开”. ADOConne ...
- Activity intent经常使用的 FLAG
Intent.FLAG_ACTIVITY_NEW_TASK 默认的跳转类型,会重新创建一个新的Activity,不过与这种情况,比方说Task1中有A,B,C三个Activity,此时在C中启动D的话 ...
- End of HTML blink tag
Recently I have read a news which said "Firfox 23 nixes support for outdated blink HTML tag&quo ...