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