c++ - Emacs shell 与带有 GCC 的终端有不同的行为

标签 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?

最佳答案

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

关于c++ - Emacs shell 与带有 GCC 的终端有不同的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17376294/

相关文章:

c++ - C 程序 : Get inode header fields and information by inode number

C++ 最佳键值容器,可按值排序并快速访问删除

python - pip install MySQL-python 出错

shell - 从shell脚本中的curl请求中提取访问 token

c++ - 包含两个 double 的类是否可以有效替代 std::complex<double> 参数?

c++ - julia Cxx 在模块中封装不同的行为

vba - 如何使用 Apple 脚本访问 Powerpoint(Mac 版)的对象事件?

macos - 如何以非 root 用户身份从 docker 容器内部访问/var/run/docker.sock? (MacOS 主机)

bash - 在 bash 中检查 XML 的内容

regex - 在 shell 脚本中进行字符串操作的最佳方法是什么?