我正在开发一个需要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?
答案 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
为其添加路径。