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