2011-11-22 75 views
1

如何讓automake在執行檢查腳本之前安裝其中一個庫?automake安裝目標進行檢查

該項目爲我們動態加載的庫之一(通過調用dlopen)建立一個模擬測試庫。問題是我們無法覆蓋我們的庫路徑進行測試,因爲仍然有許多其他庫必須被加載(這些由其他組件安裝,而不是由此makefile直接編譯)。

如果我可以在檢查腳本運行之前簡單地安裝一些庫,它會爲我節省很多工作。如果我必須把它放在一個單獨的makefile中並且先調用它,那麼很好,沒問題。基本上我只需要運行make check來做正確的事情。

+0

這種行爲會使'make check'做非常錯誤的事情。你的軟件包的'make check'行爲與幾乎所有其他的'make check'行爲不同。從http://www.gnu.org/prep/standards/html_node/Standard-Targets.html#Standard-Targets:「您應該編寫自檢程序,以便在程序編譯但未安裝時運行。」 –

+0

這只是不可能的這個產品。它__needs__分期將結合幾個依賴項目。 –

回答

0

我找不到任何官方/正確的方式,但以下似乎工作。將一個新的依賴關係添加到check並使用安裝庫目標,但覆蓋安裝了哪些庫。例如:

check_dummy: lib_LTLIBRARIES = libdummy.la 
check_dummy: install-libLTLIBRARIES 
check: check_dummy 

這個GNU Make具體我相信。

4

make check目標應該在安裝之前對軟件包進行測試。 Automake沒有辦法解決這個問題。這個想法是,如果make check失敗,您可能決定根本不安裝該軟件包。 (另外,如果你砍某種方式對你的規則中make check安裝,你可能會打破make distcheck。)

使用前安裝的存儲庫的本地庫的常用方法是冠以.:LD_LIBRARY_PATH過程中你的測試值。使用libtool構建本地庫並鏈接到它們將爲您處理所有這些可提供的細節:構建樹中的可執行文件libtool輸出是在調用正確可執行文件(隱藏在其他地方)之前設置這些變量的腳本,以確保它們使用本地庫。

如果您還想在安裝後執行測試,另一種解決方案是不使用make check,而是使用make installcheck。預計make installcheck僅在用戶運行make install後才能運行。你將不得不編寫自己的installcheck-local規則。

+0

我們不使用「make install」作爲我們的最終包。我們用它來準備可以安裝的更多包裝。當有多個automake項目和具有不同版本依賴關係的全局庫時,'libtool'也無法工作。 –

+0

由於與版本相關的類似原因,我們不能使用LD_LIBRARY_PATH來加載這些庫,我們需要一個更有限的路徑範圍(目前我們只支持一個 - 但顯然答案是支持更多)。 –