1

私はアーランモードを使用しています。ビームは、フォルダーsrcだけでなく、ネストされたフォルダーにあるソース ファイルと同じフォルダーに生成されます。

erlang.el のInferior-erlang-compile-outdirを上書きする必要があると思いますが、失敗しました。

以下は私の機能です:

(defun inferior-erlang-compile-outdir ()
  (let* (format "%s/ebin" (get-project-path))))

PS: get-project-pathは、プロジェクトのルート パスを取得する関数です。

===========更新=================

(require-package 'erlang)

;; add include directory to default compile path.
(defvar erlang-compile-extra-opts
  '(bin_opt_info 
    debug_info
    (i . "../include")
    (i . "../../include")))

;; define where put beam files.
(defun inferior-erlang-compile-outdir ()
  (concat (get-closest-pathname) "/ebin" ))

(require 'erlang-start)


;;----------------------------------------------------------------------------
;; Get closest pathname of file
;;----------------------------------------------------------------------------
(defun* get-closest-pathname (&optional (file "Makefile"))
  (let ((dir (locate-dominating-file default-directory file)))
    (or dir default-directory)))
4

1 に答える 1

3

そうです、inferior-erlang-compile-outdirコンパイルされたファイルを配置する場所を定義します。あなたの使い方let*は間違っていますが。letスコープ変数を定義できますが、あなたの場合はまったく必要ありません。2 つの文字列を連結するだけです。

(defun inferior-erlang-compile-outdir ()
    (concat (get-project-path) "/ebin" ))

今後の参考として、使用する場合はこちらletドキュメントをご覧ください。

しかし、erlang-mode を定義した時点ではまだロードされていません。したがって、erlang-mode がロードされると、関数は元の関数によって上書きされます。後で定義する必要があります。これはそれを行う必要があります:

(eval-after-load "erlang"
  '(defun inferior-erlang-compile-outdir ()
     (concat (expand-file-name (get-closest-pathname)) "ebin")))
于 2013-07-17T07:43:54.323 に答える