让flymake使用具有单独构建目录的autoconf项目的最简单方法是什么?

让flymake使用具有单独构建目录的autoconf项目的最简单方法是什么?,flymake,Flymake,有时,我希望将构建目录与源目录分开(例如,我使用的是装载到多个不同构建环境的相同源NFS)。在此配置中,我无法使用flymake,因为它找不到Makefiles。有谁能推荐一种让flymake找到正确的构建目录并运行make-C检查语法的好方法吗?我觉得这一定是一个常见的问题,但谷歌让我失望了。为了记录在案,我最终做了这件事(欢迎改进): 并将project build root设置到我的顶级源目录.dir locals.el (defadvice flymake-find-buildfile

有时,我希望将构建目录与源目录分开(例如,我使用的是装载到多个不同构建环境的相同源NFS)。在此配置中,我无法使用flymake,因为它找不到Makefiles。有谁能推荐一种让flymake找到正确的构建目录并运行make-C检查语法的好方法吗?我觉得这一定是一个常见的问题,但谷歌让我失望了。

为了记录在案,我最终做了这件事(欢迎改进):

并将
project build root
设置到我的顶级源目录
.dir locals.el

(defadvice flymake-find-buildfile
  (around advice-find-makefile-separate-obj-dir
          activate compile)
  "Look for buildfile in a separate build directory"
  (let* ((source-dir (ad-get-arg 1))
     (bld-dir (ac-build-dir source-dir)))
    (ad-set-arg 1 bld-dir)
    ad-do-it))

(defun ac-find-configure (source-dir)
  (locate-dominating-file source-dir "configure"))

(defvar project-build-root nil
  "top build directory of the project")

(defun ac-build-dir (source-dir)
  "find the build directory for the given source directory"
  (condition-case nil
      (let* ((topdir (ac-find-configure source-dir))
         (subdir (file-relative-name (file-name-directory source-dir) topdir))
         (blddir (concat (file-name-as-directory project-build-root) subdir)))
        blddir)
    (error source-dir)))