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