这是用例:我阅读了有关 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 $@ $^\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 并运行程序?
  • 最佳答案

    总结评论中的答案。

  • 更改 compilation-ask-about-save 的值。如果您不想全局更改此设置(使用 setq),您可以通过将其包装在 (let ((compilation-ask-about-save nil)) ...function contents...) 语句中来在您的函数内部更改它。
  • 将下一个错误绑定(bind)到快速的东西: (define-key c++-mode-map "\M-j" 'next-error) 。我个人为此使用 global-set-key,只是因为它在一大堆模式中都很有用。
  • 将函数中的编译命令替换为 (compile "make && ./a.out")(当然使用可执行文件的名称)。

  • 希望这可以帮助。

    关于c++ - Emacs 最快的 C++ 编译过程?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17521232/

    10-11 23:07