build:執行代碼編譯的主機,正常的話就是你的主機系統。這個參數一般由config.guess來猜就可以。當然自己指定也可以。
host:編譯出來的二進制程序所執行的主機,因為絕大多數是如果本機編譯,本機執行。所以這個值就等于build。只有交叉編譯的時候(也就是本機編譯,其他系統機器執行)才會build和host不同。用host指定運行主機。
target:這個選項只有在建立交叉編譯環境的時候用到,正常編譯和交叉編譯都不會用到。他用build主機上的編譯器,編譯一個新的編譯器(binutils, gcc,gdb等),這個新的編譯器將來編譯出來的其他程序將運行在target指定的系統上。
讓我們以編譯binutils為例:
1. `./configure --build=mipsel-linux --host=mipsel-linux --target=mipsel-linux'
說明我們利用mipsel-linux的編譯器對binutils進行編譯,編譯出來的binutils運行在mipsel-linux,這個binutils用來編譯能夠在mipsel-linux運行的代碼。“當然沒有人會用這個選項來編譯binutils”
2. `./configure --build=i386-linux --host=mipsel-linux
--target=mipsel-linux' will cross-build native mipsel-linux binutils oni386-linux.
說明我們利用i386-linux的編譯器對binutils進行編譯,編譯出來的binutils運行在mipsel-linux,這個binutils用來編譯能夠在mipsel-linux運行的代碼。“這個選項可以用來為其他的機器編譯它的編譯器”。
3. `./configure --build=i386-linux --host=i386-linux
--target=mipsel-linux' will build mipsel-linux cross-binutils on i386-linux.
說明我們利用i386-linux的編譯器對binutils進行編譯,編譯出來的binutils運行在i386-linux,這個binutils用來編譯能夠在mipsel-linux運行的代碼。“這個選項用來在i386主機上建立一個mipsel-linux的交叉編譯環境”。
4. `./configure --build=mipsel-linux --host=i386-linux
--target=mipsel-linux' will cross-build mipsel-linux cross-binutils for
i386-linux on mipsel-linux.
說明我們利用mipsel-linux的編譯器對binutils進行編譯,編譯出來的binutils運行在i386-linux,這個binutils用來編譯能夠在mipsel-linux運行的代碼。“這個選項可以用來在i386主機上建立一個mipsel-linux的交叉編譯環境,但是交叉編譯環境在mipsel-linux 編譯出來,安裝到i386-linux主機上,估計沒有多少人會這么用吧”
總的來說,只有host !=build的時候編譯才是交叉編譯。否則就是正常編譯。