0

我正在开发一个需要 GCC 4.7 或更高版本的 C++ 项目。当我在终端中调用命令行时,它工作正常,但是当我在 Emacs 中make运行时它失败了。M-x compile

当我gcc --version在命令行上运行时,它说

gcc (MacPorts gcc47 4.7.3_0+universal) 4.7.3

但是当我gcc --version从 Emacs 中的 shell 运行时,它说

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;但是当我port install foo在 Emacs 中运行时,它会显示port: command not found.

为什么会发生这种情况,如何让 Emacs 使用与终端相同版本的 GCC?

4

2 回答 2

2

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

于 2013-06-30T19:27:46.977 回答
0

无论您是在 Terminal 还是 via 中启动 gcc M-xcompile,gcc 可执行文件的位置都由PATH环境变量确定(除非它在 ​​Makefile 中进行了配置 - 但如果是这种情况,您将不会遇到您所描述的问题)。因此,首先在终端中检查它:

echo $PATH

您可以使用以下命令仔细检查可执行文件的位置

which gcc

然后,在emacs中,

(getenv "PATH")

这就是make当 emacs 通过M-xcompile. 使用 .将值更改为您在终端中获得的值setenv。您还可以更改 emacs 自己的变量exec-path以与您的PATH. 该变量是一个字符串列表(=paths),使用add-to-list.

于 2013-07-05T13:32:43.617 回答