Linux에서 emacs를 빌드하여 빌드된 경로를 바이너리에 포함하지 않고 다른 경로로 무해하게 재배치할 수 있는 방법이 있습니까?
즉, 빌드를 사용한 --prefix=/a/b/c
다음 모든 항목을 /d/e/f
해당 빌드로 이동하면 고정 경로에 의존하기 때문에 실행되지 않습니다 /a/b/c
. /a/b/c
바이너리 자체 내부에 문자열이 표시됩니다 .
Windows emacs는 어떤 디렉토리에나 설치될 수 있고 거기에서 잘 실행될 수 있습니다. 따라서 Linux emacs에게 "지금 어디에 있든" 동일한 방식으로 실행하도록 지시할 수 있다고 생각합니다.
아래의 변수 경로를 가리키는 디렉터리 트리의 고정 이름 심볼릭 링크와 같은 옵션은 없습니다.
답변1
컴파일할 때 어떤 예방조치도 취하지 않더라도 Emacs는 대부분 무해하게 재배치를 수행할 수 있습니다. 하드코딩된 경로가 작동하지 않으면 Emacs는 실행 파일 근처의 디렉터리를 찾습니다.
Emacs는 이를 호출하는 실행 파일의 위치를 확인하려고 시도합니다. 이 정보를 변수에 저장합니다 invocation-directory
. 이를 가정하면 /path/to/bin/emacs
Emacs는 하드 코딩된 디렉토리에서 필요한 데이터 파일을 찾은 다음 /path/to
.
bin
최상위 디렉토리인 , etc
, leim
, lib-src
, lisp
, 를 사용하여 Emacs 소스 코드와 거의 동일한 방식으로 디렉토리를 구성해야 합니다 site-lisp
. 특히, 적어도 Emacs 23.2에서는 디렉토리가 lib-src
존재해야 합니다(비어 있더라도).
Emacs가 이 방법으로 찾을 수 없는 디렉토리가 있습니다. 환경을 설정합니다 EMACSDATA=/path/to/etc
. INFOPATH
설정해야 할 수도 있습니다 .