繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM