当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 4 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : emacs C语言编译自动关联当前cpp文件
帖子发表于 : 2010-07-18 9:01 

注册: 2010-02-01 19:08
帖子: 62
送出感谢: 0 次
接收感谢: 0 次
我现在是用 Makefile 的,或者在 M-x compile 以后的minibuffer里修改需要编译的命令
怎么设置使得 emacs 自动关联文件名?

比如在 a.cpp 窗口编译默认的是 g++ a.cpp -g -Wall -o test
b.cpp 就自动变成 g++ b.cpp -g -Wall -o test


_________________
God grant me the serenity to accept the things I cannot change
the courage to change the things I can
the wisdom know the difference


页首
 用户资料  
 
2 楼 
 文章标题 : Re: emacs C语言编译自动关联当前cpp文件
帖子发表于 : 2010-07-18 22:01 
头像

注册: 2006-09-26 21:02
帖子: 28
送出感谢: 0 次
接收感谢: 0 次
代码:
;;================================
;; 快速编译单个文件
;;================================
(provide 'mycompile)

(defvar compile-guess-command-table
  '((c-mode       . "gcc -Wall -g %s -o %s -lm"); Doesn't work for ".h" files.
    (c++-mode     . "g++ -g %s -o %s -lm")   ; Doesn't work for ".h" files.
    (fortran-mode . "pgf77 %s -o %s.exe")
    (f90-mode . "pgf90 %s -o %s.exe")
    )
  "*Association list of major modes to compilation command descriptions, used
by the function `compile-guess-command'.  For each major mode, the compilation
command may be described by either:

  + A string, which is used as a format string.  The format string must accept
    two arguments: the simple (non-directory) name of the file to be compiled,
    and the name of the program to be produced.

  + A function.  In this case, the function is called with the two arguments
    described above and must return the compilation command.")

;; This code guesses the right compilation command when Emacs is asked
;; to compile the contents of a buffer.  It bases this guess upon the
;; filename extension of the file in the buffer.

(defun compile-guess-command ()

  (let ((command-for-mode (cdr (assq major-mode
                 compile-guess-command-table))))
    (if (and command-for-mode
        (stringp buffer-file-name))
   (let* ((file-name (file-name-nondirectory buffer-file-name))
          (file-name-sans-suffix (if (and (string-match "\\.[^.]*\\'"
                          file-name)
                      (> (match-beginning 0) 0))
                 (substring file-name
                       0 (match-beginning 0))
               nil)))
     (if file-name-sans-suffix
         (progn
      (make-local-variable 'compile-command)
      (setq compile-command
            (if (stringp command-for-mode)
           ;; Optimize the common case.
           (format command-for-mode
              file-name file-name-sans-suffix)
         (funcall command-for-mode
             file-name file-name-sans-suffix)))
      compile-command)
       nil))
      nil)))



试试用这个。使用时还是用compile命令。
当然,为了使用你所要求的编译参数,你要修改下compile-guess-command-table的内容。


页首
 用户资料  
 
3 楼 
 文章标题 : Re: emacs C语言编译自动关联当前cpp文件
帖子发表于 : 2010-07-18 22:04 
头像

注册: 2008-03-25 15:49
帖子: 25878
地址: 谁知道?
送出感谢: 8
接收感谢: 10
mark


页首
 用户资料  
 
4 楼 
 文章标题 : Re: emacs C语言编译自动关联当前cpp文件
帖子发表于 : 2010-07-19 19:35 

注册: 2010-03-26 8:27
帖子: 15
送出感谢: 0 次
接收感谢: 0 次
嗯,不错


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 4 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 1 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译