emacs - 如何使Emacs识别要编译的bash环境变量?

标签 emacs compilation

我正在尝试通过Emacs的编译模式来编译u-boot,看来Emacs不知道如何找到bash环境变量。即使我设置了它们,并且可以通过Emacs shell仿真进行编译,但是编译模式仍会尝试编译它们,好像它们不存在一样。

我需要怎么做才能使其更具环境意识?

最佳答案

您可以尝试在.emacs中添加类似内容:

(let ((path (shell-command-to-string ". ~/.bashrc; echo -n $PATH")))
  (setenv "PATH" path)
  (setq exec-path 
        (append
         (split-string-and-unquote path ":")
         exec-path)))


根据您是否在.bash_profile.bashrc中设置了env变量,您可能需要稍微调整一下此代码段。该示例是针对PATH变量的,它有点特殊(因为您也必须在Emacs中设置exec-path),但是可以扩展为适用于任意变量-您可以列出具有以下内容的变量:从.bashrc读取并设置为Emacs。

我不确定您使用的是OS X还是GNU / Linux。在Linux中从GUI的菜单栏中启动Emacs通常会导致Emacs与从命令行启动的Emacs没有相同的PATH。此问题可追溯到第一个xdm Xsession脚本,并且它们很容易修复(基本上使用执行Xsessionwrapperexec $SHELL -c Xsession脚本,因此外壳程序在运行用户的Xsession之前便已运行),但没有人愿意去做。在很长的时间内这样做(我怀疑有人会这样做)。据我所知,这个问题甚至存在于现代xdm后代中,例如kdmgdm

在OS X上,处理env变量完全是另一个问题,要获取您的ENV变量,通常必须像这样/Applications/Emacs.app/Contents/MacOS/Emacs从命令行运行Emacs或使用~/.MacOSX/environment.plist。我提供的代码段在两种情况下都应该涵盖您。

更新资料

最近,exec-path-from-shell扩展使此过程变得更加容易。它以几乎相同的方式设置emacs $PATH,但是使用扩展通常比自己破解解决方案更可取。

关于emacs - 如何使Emacs识别要编译的bash环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9663396/

相关文章:

Emacs 和 Helm - 当我执行 'buffer-history' 时如何不显示 'kill-buffer'

python - Emacs Elpy 找不到包

c++ - 编译(?)问题。 Visual Studio C++ 2008

c# - CodeDomProvider.CompileAssemblyFromSource - 找不到 Roslyn (csc.exe)

machine-learning - 幕府将军安装窗口

java - 发布(编译)java程序而不发布源代码

emacs - 在 AUCTeX 中插入加星标的环境或命令

来自 http ://marmalade-repo. org/的包安装的 Emacs 自动完成不起作用

c++ - QuantLib-vc110-mt.lib中的 "mt"是什么意思?

git - Ediff 作为 git difftool