elisp警告"参考自由变量"

时间:2014-04-06 18:38:47

标签: emacs elisp

我在徘徊如何摆脱elisp的警告。 我的设置如下:

我有init.el文件,它设置" emacs-root"变量:

;; root of all emacs-related stuff
(defvar emacs-root
   (if (or (eq system-type 'cygwin)
      (eq system-type 'gnu/linux)
      (eq system-type 'linux)
      (eq system-type 'darwin))
        "~/.emacs.d/"    "z:/.emacs.d/"
     "Path to where EMACS configuration root is."))

然后在我的init.el中

;; load plugins with el-get
(require 'el-get-settings)

在el-get-settings.el中我正在使用el-get加载包并附加" el-get / el-get"文件夹到加载路径:

 ;; add el-get to the load path, and install it if it doesn't exist
 (add-to-list 'load-path (concat emacs-root "el-get/el-get"))

问题在于我对“emacs-root”' 在添加到列表的最后一个表达式中:"引用自由变量' emacs-root'"

我在这里做错了什么,有没有办法让编译器满意?

这个设置工作正常顺便说一下 - 我在加载时没有任何问题,只是这个恼人的警告。

问候,罗马

1 个答案:

答案 0 :(得分:4)

在编译引用变量emacs-root的文件时,必须已定义变量。 避免警告的最简单方法是添加

(eval-when-compile (defvar emacs-root)) ; defined in ~/.init.el
在违规表格之前的el-get-settings.el

或者,您可以将defvarinit.el移至el-get-settings.el

请注意,您可以在eval-when-compile中使用defvar来加速加载已编译的文件(当然,如果您这样做,则不应在平台之间复制已编译的文件):

(defvar emacs-root
  (eval-when-compile
    (if (or (eq system-type 'cygwin)
            (eq system-type 'gnu/linux)
            (eq system-type 'linux)
            (eq system-type 'darwin))
        "~/.emacs.d/"
        "z:/.emacs.d/"))
  "Path to where EMACS configuration root is.")

另请注意,问题中的原始defvar emacs-root如果已损坏,则会在Windows上将变量emacs-root设置为"Path to where EMACS configuration root is."