檢查給定包的存在通常不是一個好主意,因爲它依賴於特定的發行版(例如Fedora)和特定的軟件包名稱(例如libc6-dev-i386
);其他發行版(或相同發行版的其他版本)將具有不同的軟件包名稱和工具來與軟件包管理器進行交互(例如apt
vs rpm
vs ...)
成熟的autotools方法是運行測試(例如,包含給定的頭文件),而不是檢查可能提供您需要的東西(例如某個包)的東西 -
eg如果您的實際代碼需要包含features.h
,那麼您應該測試(在預構建步驟中)是否可以包含此文件而沒有錯誤。
如果不能使用features.h
,以下autotools示例將停止並顯示錯誤;它允許用戶在開始耗時的構建過程之前通過安裝正確的軟件包(例如在README中暗示)來解決問題。
#snippet from configure.ac
#stop configure process if we cannot use foo.h
AC_CHECK_HEADERS([foo.h],,AC_ERROR([cannot include foo.h - try installing libfoo-dev])
如果不是失敗的配置步驟中,您寧願簡單地禁用您構建的部分,你可能想要做這樣的事情:
configure.ac:
have_bar_h="no"
AC_CHECK_HEADERS([bar.h],[have_bar_h="yes"])
AM_CONDITIONAL([BAR]) [ test "x${have_bar_h}" = "yes" ]
和Makefile .am
if BAR
# only do the 32bit build if we have bar.h
bin_PROGRAMS+=coolapp32
ebduf
對不起,這個答案是非常autotools具體的,但我敢肯定,waf
有類似的方法;查看WAF文檔中有關Configuration helpers的部分。
也許[這個](http://serverfault.com/questions/54736/how-to-check-if-a-library-is-installed)會有幫助嗎? – Glapa