Emacs shell与终端与GCC的行为不同

时间:2013-06-29 03:08:39

标签: c++ macos shell emacs terminal

我正在开发一个需要GCC 4.7或更高版本的C ++项目。当我在终端的命令行上调用make时,它工作正常,但是当我在Emacs中运行M-x 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?

2 个答案:

答案 0 :(得分:2)

M-x 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文件中。

答案 1 :(得分:0)

无论是在终端中启动gcc还是通过 Mx 编译,gcc可执行文件的位置都由PATH环境变量决定(除非它在Makefile - 但如果是这样的话,你就不会遇到你所描述的问题了。所以,首先在终端检查:

echo $PATH

您可以使用

仔细检查可执行文件的位置
which gcc

然后,在emacs中,

(getenv "PATH")

这是make在emacs通过 M-x compile 启动它时会看到的内容。使用setenv将值更改为终端中的值。您还可以更改emacs自己的变量exec-path,以便与PATH同步。该变量是字符串列表(=路径),使用add-to-list为其添加路径。