2013-03-08 23 views
3

各種各樣的開源項目都是在源代碼中分佈的,應該採用./configure && make的方法進行編譯。但是如果我想交叉編譯,那麼在這兩個步驟中,我應該告訴他們哪個目標平臺要獲取二進制文件?何時/如何指定配置/製造目標

它是否與配置/製造一般,或這是每個項目特定?什麼可能是編譯某些項目,庫或控制檯應用程序並指定目標的示例?

我知道很多項目在他們的網站上都有一個專門用於「交叉編譯這個程序」的網頁。所以它似乎是項目特定的設置。但是該項目仍然使用configure/make,那麼所有這些關係是什麼?

回答

4

如果您的系統使用的是標準的GNU autoconf,那麼您總是在配置時定義交叉編譯,而不是在編譯時。如果配置腳本不知道你正在交叉編譯,當它探測系統尋找什麼是受支持的和什麼不受支持的時候,它可能會得到不正確的答案。

交叉編譯是要配置的--build,--host和--target標誌。你永遠不需要設置--build:它總是指你正在運行的系統進行配置,配置可以爲自己弄清楚。對於正常的交叉編譯,你也不需要設置--host,你可以設置--target到交叉編譯目標。如果需要,您可能還需要設置CC(用於C程序)和/或CXX(用於C++程序),LD,AR,STRIP和其他一些程序。我個人更喜歡在一個單獨的目錄下建爲好,雖然有些包不支持它不幸地):

tar xzf foo-1.1.tar.gz 
mkdir obj 
cd obj 
../foo-1.1/configure --target=... CC=...-gcc CXX=...-g++ ... 
make 

注意這是所有基本的autoconf/automake的提供,因此所有的項目都會做同樣的方式(儘管以我的經驗,許多不會經常交叉編譯的項目,做錯了事情,使得它不能很好地工作)。

+1

+1,*除*根據http://www.gnu.org/savannah-checkouts/gnu/autoconf/manual/autoconf-2.69/html_node/Specifying-Target-Triplets.html你應該設置' - 主機「來指定輸出將運行的系統類型。 '--target'僅適用於輸出本身是交叉編譯器的情況。 – mtrw 2013-03-20 18:17:18