2010-03-26 63 views
3

你通常調用下面的命令來建立一個./configure d產品:按照慣例,「安裝」會更新它安裝的目標嗎?

make 
make install 

好了,該產品是在現在的系統。然後你改變一些源代碼文件,並只調用make install。問題是,install目標的傳統實現是否需要重新編譯可執行文件,或者只是將舊文件複製到適當的系統路徑中?

回答

3

當然,這取決於你喜歡誰的傳統的。這裏的GNU convention

安裝
編譯程序,並複製可執行文件,庫等方面,他們應該存在的實際使用的文件名。

這似乎是一個明智的約定:安裝過期的可執行文件將會導致混淆。

+0

並注意*這是一件非常糟糕的事*。當以root身份運行'make install'時,編譯程序經常會做出像愚蠢的意外事情,例如delete/dev/null。 – 2011-03-23 04:10:41

+0

在我的生活中從未見過。 @贊:所以你的建議是不運行'make install'作爲根?不知道該如何工作...... – 2011-03-23 10:03:58

+0

不,我的建議是編寫不會自動構建的make install腳本。 – 2011-03-23 17:26:20

3

make如果您的依賴關係設置正確,則通過設計處理此問題。

如果make構建一個名爲helloworld的二進制文件。您可能會編寫您的install目標,以便將此helloworld二進制文件從源目錄複製到/usr/bin

這意味着安裝目標應該依賴於helloworld二進制文件,這也意味着如果二進制文件helloworld不是最新的,它將被重新編譯。當你輸入make install時,你會默認呼叫make(默認目標在這裏)。

+0

eee ..我只是想知道你的問題實際上是關於安裝目標應該依賴於什麼? – Ben 2010-03-26 11:17:10

2

是的,編寫良好的makefile將有install取決於正在安裝的可執行文件(或在all),因此它會確保可執行文件在安裝前是最新的。

拆分有幾個原因。通常,默認目標是all,並且不安裝這些文件,只構建它們。對於開發人員來說,這意味着他們可以輕鬆地在工作環境中構建源代碼,而不會影響系統的其他部分。對於最終用戶來說,這意味着他們可以以普通用戶身份運行構建,然後僅以root身份運行make install

這確實意味着在技術上,make階段make; make install是多餘的。