2013-06-29 59 views
0

我正在研究一個需要GCC 4.7或更高版本的C++項目。當我在終端的命令行中調用make時,它工作正常,但在Emacs中運行M-x compile時失敗。Emacs shell與GCC終端有不同的行爲

當我運行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?

+1

這是通常的macosx問題,您的shell的環境沒有在從dock(例如Emacs)啓動的應用程序中設置。 – Stefan

+0

@Stefan你知道如何解決這個問題嗎? –

回答

2

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

0

無論你在終端或通過的Mx推出GCC編譯,GCC可執行文件的位置被PATH環境變量(確定,除非在Makefile中配置的 - 但如果它的話,你不會有你描述的問題)。所以,首先檢查它在終端:

echo $PATH 

使用

which gcc 

然後,在Emacs你可以仔細檢查可執行文件的位置,

(getenv "PATH") 

也就是說當emacs通過Mx編譯將會看到什麼make。使用setenv將值更改爲您在終端中獲得的值。您也可以將emacs自己的變量exec-path更改爲與您的PATH同步。該變量是字符串列表(=路徑),使用add-to-list添加路徑。