2014-05-17 31 views
3

這看起來像是一個顯而易見的黑客,我討厭自己寫,但我沒有找到它的運氣。emacs編譯命令在上級目錄中找到makefile

我想要一個M-x compile的方法,它將在目錄樹中從cwd向上搜索到帶有Makefile的第一個目錄,然後運行make命令。因此,它基本上

  1. 如果./Makefile存在,運行make命令
  2. 否則,cd ..$HOME再試

停止。

回答

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

+0

Uagh。 'locate-dominating-file'是我*幾乎記得的東西。謝謝。 –

相關問題