2013-10-31 74 views
3

我已經使用了autoconf/automake的一個小項目是如何失敗。自動工具,如果交叉編譯器無法找到

該項目旨在是既本地編譯和交叉編譯例如因此:

./configure --host=arm-none-eabi 

這工作正常。但是,一個問題是,如果未安裝交叉編譯器,則配置的腳本會忽略它,並使用安裝的默認編譯器高興編譯它。

./configure --host=arm-none-eabi 
checking for a BSD-compatible install... /usr/bin/install -c 
checking whether build environment is sane... yes 
checking for arm-none-eabi-strip... no 
checking for strip... strip 
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p 
checking for gawk... gawk 
checking whether make sets $(MAKE)... yes 
checking whether make supports nested variables... yes 
checking whether make supports nested variables... (cached) yes 
checking whether make sets $(MAKE)... (cached) yes 
checking for arm-none-eabi-gcc... no 
checking for gcc... gcc 
checking whether the C compiler works... yes 

這裏沒有找到arm-none-eabi-gcc。但它找到了本地gcc,並繼續使用本地編譯器。

我可以把什麼的configure.ac有配置腳本停止和錯誤,如果我通過使用主機= XXXX和該編譯器無法找到請求交叉編譯?

回答

2

當您指定--host=<host-type>,並且此值與運行config.guess腳本的結果不同時,autoconf將進入cross-compilation模式。具體而言,可變cross_compiling設置爲yes

如果配置腳本是在「交叉編譯」模式,它不能運行任何生成的可執行文件,所以沒有辦法判斷一個生成的二進制文件是一個有效的「主機」二進制與否。據推測,文件magic值的大型數據庫可能能夠判斷是否生成了有效的主機二進制文件。儘管自動工具內置了幾十年的經驗,但仍有一些組合問題無法跟上所有可能的架構和ABI。

autoconf C編譯器tests檢查編譯器 - 即$CC - 是否可以構建可執行文件。 autoconf可以提供警告如果編譯器不與主機三重前綴,例如,arm-none-eabi-gcc,但不會「失敗」,如果它發現一個工作的編譯器,諸如天然gcc

所以,確保交叉編譯與正確的編譯器的唯一方法是指定編譯:

./configure --host=arm-none-eabi CC="arm-none-eabi-gcc"

如果編譯器不能建立可執行文件,配置腳本將失敗。