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

时间:2014-05-17 19:58:19

标签: emacs

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

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

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

1 个答案:

答案 0 :(得分: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))

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