簡體   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