以下是用例:我閱讀了關於C++ 的技術博客文章(多重繼承失敗和多線程等)。 通常他們會附帶一些代碼。它幾乎總是一個文件,我幾乎總是想要運行它並玩弄它。Emacs最快的C++編譯過程?
我想用Emacs做到這一點,我想快速地做到這一點, 與最少(或相當少的)擊鍵一樣。
因此,假設我已經在其自己的文件夾 中創建了一個multiple_inheritance.cc
文件並粘貼了代碼。我如何快速獲得可執行文件?
這裏是我現在正在做的事情(希望有人會改善它。)
(defun cpp-generate-makefile()
(interactive)
(let* ((n-buffer (buffer-file-name))
(n-file (file-name-nondirectory n-buffer))
(n-target (file-name-sans-extension n-file))
(n-makefile (concat (file-name-directory n-buffer) "Makefile")))
(if (file-exists-p n-makefile)
(when (called-interactively-p 'any)
(message "Makefile already exists"))
(with-current-buffer (find-file-noselect n-makefile)
(insert
(concat n-target ": " n-file
"\n\tg++ -g -O2 -std=c++0x -o [email protected] $^\n\n"
"clean: \n\trm -f " n-target "\n"))
(save-buffer)))))
(defun cpp-run()
(interactive)
(save-buffer)
(cpp-generate-makefile)
(compile "make"))
(add-hook 'c++-mode-hook
(lambda()
;; ...
(define-key c++-mode-map [f5] 'cpp-run)))
這裏有幾件事情,我慢下來目前:
compile
問我是否要保存任何打開與C++完全無關的文件。- 我想在
*compilation*
緩衝區中發生錯誤。 我查看了compile.el
,其中compilation-num-errors-found
已定義, 但該變量未在該文件中的任何位置使用。 - 另一方面,如果沒有錯誤(我只需要一個謂詞), 爲什麼不啓動
term
並運行該程序?
你爲什麼要指向編譯緩衝區?不需要導航,只需使用'M-g n'和'M-g p'導航錯誤。你爲什麼生成一個Makefile? GNU Make至少有[隱式規則](http://www.gnu.org/software/make/manual/make.html#Implicit-Rules),它可以[編譯C++](http://www.gnu.org /software/make/manual/make.html#Catalogue-of-Rules)。只需使用'make CXXFLAGS ='其中''是您想要的編譯標誌,''是沒有要編譯的文件的擴展名。 –
lunaryorn
變量'compilation-ask-about-save'用於在編譯之前詢問要保存哪些緩衝區。 – juanleon
@ lunaryorn,感謝您提供捷徑。我不知道他們存在。之前,我從'* compilation *'跳轉到了'C-m'的錯誤。 關於隱含規則,這很好理解,但速度不如''快。 此外,我目前的腳本添加了一個乾淨的目標,所以我可以遞歸清理我所有的源代碼。如果我想添加更多文件,這也是一個好的開始。 –