답변:
이러한 오래된 파일이로드되는 것을 막는 기본 방법은 없지만 쉽게 제거 할 수있는 방법이 있습니다.
M-x byte-recompile-directory RET ~/.emacs.d/elpa/
. auto-compile-on-load-mode
파일을로드하기 전에 컴파일 할 수있는 파일을 활성화 할 수 있습니다.그렇습니다. 오히려 간단합니다. load-prefer-newer
변수 정확하게이 목적을 제공.
(setq load-prefer-newer t)
불행히도 일부 코드가 .elc
파일을 특별히 대상으로 지정하면 작동하지 않습니다 (
예 :) (load "server.elc")
. 그러나 require
s를 사용 하거나 load
접미사없이 전화 를하는 한 충분 해야합니다.
문서에서 :
load-prefer-newer는 lread.c에 정의 된 변수입니다.
그 값은 nil입니다설명서 :
비-닐은로드가 최신 버전의 파일을 선호 함을 의미합니다.
파일 이름 접미사가 명시 적으로 지정되지 않고로드가 다양한 접미사를 시도하는 경우에 적용됩니다 (load-suffixes 및 load-file-rep-suffixes 참조). 일반적으로 명시 적으로 지정하지 않는 한 존재하는 첫 번째 파일에서 중지됩니다. 이 옵션이 0이 아닌 경우 모든 접미사를 확인하고 최신 파일을 사용합니다.
이것을 사용자 정의하면 사용자 정의를 읽기 전에로드 된 파일에는 영향을 미치지 않습니다.
나는 오래 전에 인터넷에서 이것을 만났다.
;; If you're saving an elisp file, likely the .elc is no longer valid:
(add-hook 'emacs-lisp-mode-hook 'esk-remove-elc-on-save)
(defun esk-remove-elc-on-save ()
"If you're saving an elisp file, likely the .elc is no longer valid."
(make-local-variable 'after-save-hook)
(add-hook 'after-save-hook
(lambda ()
(if (file-exists-p (concat buffer-file-name "c"))
(delete-file (concat buffer-file-name "c"))))))
FILE
emacs-lisp-mode에서 작업하고 저장하면 위의 코드 FILEc
가 있으면 제거 됩니다.
또한 때로는 개발중인 패키지를 편집하고 다시 컴파일하는 것을 잊었습니다. 새 파일을로드하려고 할 때 Emacs가 여전히 오래된 컴파일 된 파일을 사용하고 있음을 깨닫는 데 시간이 걸립니다.
init 파일에 후크를 추가하는 것이 좋습니다?
(add-hook 'after-save-hook 'byte-compile-current-buffer)
또는 el 파일에만 후크를 적용하려는 경우 :
(add-hook 'emacs-lisp-mode-hook (lambda () (add-hook 'after-save-hook 'byte-compile-current-buffer nil t)))
auto-compile
Emacs 24.4+에서 (우수한!) 라이브러리 를 사용할 것을 촉구 합니다. 실제 구성 및 잊어 버린 솔루션입니다.load-prefer-newer
단지 당신이 있습니다 보장 느린 컴파일되지 않은 코드를 계속 실행 하여 컴파일 된 코드를 최신의 출소 후.