emacs compile-command在上级目录中查找makefile

Cha*_*tin 3 emacs

这似乎是一个明显的黑客,我讨厌自己写,但我找不到运气.

我希望一种方法可以M-x compile在目录树中从cwd向上搜索到带有Makefile的第一个目录,然后运行make命令.所以,基本上就是这样

  1. 如果./Makefile存在,请运行make命令
  2. 否则,cd ..再试一次

停下来$HOME.

lun*_*orn 6

下面的代码定义compile-parent,它定位最近的代码Makefile并创建一个make使用该Makefile 的命令.它的行为就像compile它仍会提示,向您显示它将使用的命令,并为您提供编辑它的机会,例如通过指定特定目标.

(defun compile-parent (command)
  (interactive
   (let* ((make-directory (locate-dominating-file (buffer-file-name)
                                                  "Makefile"))
          (command (concat "make -k -C "
                           (shell-quote-argument make-directory))))
     (list (compilation-read-command command))))
  (compile command))
Run Code Online (Sandbox Code Playgroud)

您可能还想查看Projectile扩展,它提供了一种次要模式,可以通过VCS元数据或特定构建文件的存在来检测项目,还有几个命令可以从项目根目录开始工作,包括从项目projectile-compile运行的命令M-x compile根.