3

对不起我的英语不好。

我正在使用 erlang flymake 配置我的 emacs。src 的嵌套文件夹中的源文件报告“找不到包含文件”,但文件src/夹中的文件可以找到包含文件。

我对 erlang 的 emacs 设置:

;; erlang-mode
(setq load-path (cons "/usr/local/Cellar/erlang/R15B02/lib/erlang/lib/tools-2.6.8/emacs" load-path))
(setq erlang-root-dir "/usr/local/Cellar/erlang/R15B02/lib/erlang")
(setq exec-path (cons "/usr/local/Cellar/erlang/R15B02/lib/erlang/bin" exec-path))
(require 'erlang-start)

;; distel
(add-to-list 'load-path "/usr/local/share/distel/elisp/")
(require 'distel)
(distel-setup)

;; erlang-flymake
(require 'erlang-flymake)
(erlang-flymake-only-on-save)

我的 erlang 应用程序文件夹如下所示:

app/src/      (source code)
    src/mod
    src/lib

app/include/  (hrls)
app/ebin/     (compiled code)

...etc
4

2 回答 2

2

其中erlang-flymake有 2 个变量 (erlang-flymake-get-include-dirs-functionerlang-flymake-get-code-path-dirs-function),它们指定搜索包含和 ebin 目录的函数。现在,他们指向的函数erlang-flymake-get-include-dirs只是erlang-flymake-get-code-path-dirs简单地返回当前的 dir +includeebin相应地返回。例如,您可以使用以下代码来执行此操作:

(defun get-erlang-app-dir ()
  (let* ((src-path (file-name-directory (buffer-file-name)))
     (pos (string-match "/src/" src-path)))
    (if pos
    (substring src-path 0 (+ 1 pos))
      src-path)))

(setq erlang-flymake-get-code-path-dirs-function
      (lambda ()
    (concat (get-erlang-app-dir) "ebin")))

(setq erlang-flymake-get-code-include-dirs-function
      (lambda ()
    (concat (get-erlang-app-dir) "include")))

PS您是否使用钢筋来维护您的项目?

于 2012-12-18T07:21:33.507 回答
1

如果您使用 erlang-flymake,您可能需要查看https://github.com/ten0s/syntaxerl。它是 Erlang 的语法检查器。它在后台使用 erlang-flymake,但不是使用 `erlc',而是使用自定义语法检查器,可以评估 .erl、.hrl、.config、.rel、.app、.app.src、.escript 文件。语法检查器是 rebar 感知的,但也适用于标准 Erlang/OTP 目录结构。Emacs 的设置也在那里。

于 2012-12-21T08:47:36.033 回答