【问题标题】:Emacs shell has different behavior from Terminal with GCCEmacs shell 与带有 GCC 的终端的行为不同
【发布时间】:2013-06-26 21:51:47
【问题描述】:

我正在开发一个需要 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?

【问题讨论】:

  • 这是一个常见的macosx问题,你的shell的环境没有在从dock启动的应用程序中设置(例如Emacs)。
  • @Stefan 你知道如何解决这个问题吗?

标签: c++ macos shell emacs terminal


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    echo $PATH
    

    您可以使用

    再次检查可执行文件的位置
    which gcc
    

    然后,在emacs中,

    (getenv "PATH")
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-17
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-23
      相关资源
      最近更新 更多