2011-11-21 105 views
2

有什麼方法可以指定gmake替代編譯器目錄。即:我安裝了多個編譯器,並試圖在編譯時使用備用gcc。gmake覆蓋編譯器目錄

一樣,如果我指定要使用的新規定GCC。

gmake CC=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/gcc 
    CXX=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/g++ 
    LD=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/gcc 
    AR=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/ar 

什麼,我試圖避免是爲所有的工具絕對路徑。我正在嘗試類似於

gmake COMPILER_DIR=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/ 

這也許適合作爲交叉編譯問題。

+0

這取決於你的makefile,以及它如何組裝編譯器命令。我們不能講太多,我們不知道它。 – PlasmaHH

+1

我認爲你沒有太多可以做的事情。至少在變量名稱方面,Makefiles基於[convention](http://www.gnu.org/software/make/manual/make.html#Utilities-in-Makefiles),不是所有的Makefile-作者堅持(不幸)。但即使如此,工具的慣例也沒有說明你想要達到的目標。考慮爲你的目的編寫一個包裝Makefile或shell腳本。像'DIR =/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/&& make CC = $ DIR/gcc CXX = $ DIR/g ++ LD = $ DIR/ld AR = $ DIR/ar' –

回答

0

在生成文件中,你可以使用這樣的事情:

CC = $(COMPILER_DIR)gcc 

如果不定義COMPILER_DIR那麼正常的系統gcc將被使用,否則從您的目錄。

+0

這是一種簡單的方法,但要求我只爲了移植而更改makeflags。這是一個很好的建議,只是希望能有相同的本地gmake supposrt。 – Soumen

+0

將此標記爲答案,儘管仍然在尋找gmake原生支持,而不是選擇由@christanK發送的答案,因爲它涉及編寫額外的shell腳本,這有點偏離了主要問題。 – Soumen

+0

這個方法確實有問題。如果產品具有自己的make文件的依賴庫,則無法編輯現有的makefile。所以唯一的辦法是重寫'gmake CC =/installdir/gcc' – Soumen

0

只是爲了將來參考這裏是如何的crosstool工具chainkit建議。 方法1 取而代之的是使用完整的/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/使用PATH=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/bin並在make文件中保留CC=$(CROSSCOMPILERVERSION)gcc其中CROSSCOMPILERVERSION=i686-unknown-linux-gnu某種程度上這個設置最好,仍然不知道如何。

方法2 在method.1建議,但還創建crosstool的bin目錄軟鏈接使用路徑。如/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/bin將i686-unknown-linux-gnu-gcc的softlink添加爲gcc。這是不是改變makefile文件更容易(或CAS你沒有權限更改makefile文件)

0

當你建立binutilsgcc它們安裝在兩個不同的路徑:

  • bin/PREFIX-gcc
  • PREFIX/bin/gcc

這允許您在路徑中有多個交叉編譯器,每個交叉編譯器都有不同的可執行文件名稱,但您也可以簡單地將第二個變體放入您的路徑中那gcc現在是交叉版本的選擇。這對Makefiles很有用。

您的示例已經使用第二種形式:/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/ar而不是/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/bin/i686-unknown-linux-gnu-ar(它可能也存在於您的系統上)。

因此,您可以使用PATH=/opt/crosstool/gcc-3.2.2-glibc-2.2.5/i686-unknown-linux-gnu/i686-unknown-linux-gnu/bin/:$PATH make ...來構建,現在默認的gcc將是交叉版本。