[英]Emacs shell has different behavior from Terminal with GCC
我正在开发一个需要GCC 4.7或更高版本的C ++项目。 当我在终端的命令行上调用make
时,它工作正常,但是当我在Emacs中运行Mx compile
时失败了。
当我在命令行上运行gcc --version
时,它说
gcc (MacPorts gcc47 4.7.3_0+universal) 4.7.3
但是,当我在Emacs中从shell运行gcc --version
时,它说
i686-apple-darwin11-llvm-gcc-4.2 (GCC) 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)
我做了一些调查,发现了Emacs和Terminal之间的另一个区别。 我在终端上使用MacPorts安装了GCC 4.7; 但是当我在Emacs中运行port install foo
时,它说port: command not found
。
为什么会发生这种情况,如何让Emacs使用与终端相同版本的GCC?
Mx shell
启动一个新的shell。 对我来说,它是一个bash shell,但它可能是csh或zsh或其他一些shell。 当emacs启动一个新的shell时,它运行〜/ .emacs_SHELL,其中SHELL是bash或csh或者什么。 因此,您可以将shell启动文件复制到该文件,并且应该可以正确设置路径和其他环境变量。
在我的情况下,我是一个bash用户,所以我将.profile复制到.emacs_bash并且它有效。 您可能有.bash_profile或.bashrc而不是.profile。 但总体思路是一样的:将emacs shell启动命令放在.bash_WHATEVER文件中。
无论是在终端中启动gcc还是通过Mx 编译 ,gcc可执行文件的位置都由PATH
环境变量确定(除非它在Makefile中配置 - 但如果是这种情况,则不会出现您所描述的问题)。 所以,首先在终端检查:
echo $PATH
您可以使用重复检查可执行文件的位置
which gcc
然后,在emacs中,
(getenv "PATH")
那是什么make
看到的emacs时通过的Mx 编译启动它。 使用setenv
将值更改为终端中的值。 您还可以更改emacs自己的变量exec-path
以与PATH
同步。 该变量是字符串列表(= paths),使用add-to-list
为其添加路径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.