你通常調用下面的命令來建立一個./configure
d產品:按照慣例,「安裝」會更新它安裝的目標嗎?
make
make install
好了,該產品是在現在的系統。然後你改變一些源代碼文件,並只調用make install
。問題是,install
目標的傳統實現是否需要重新編譯可執行文件,或者只是將舊文件複製到適當的系統路徑中?
你通常調用下面的命令來建立一個./configure
d產品:按照慣例,「安裝」會更新它安裝的目標嗎?
make
make install
好了,該產品是在現在的系統。然後你改變一些源代碼文件,並只調用make install
。問題是,install
目標的傳統實現是否需要重新編譯可執行文件,或者只是將舊文件複製到適當的系統路徑中?
當然,這取決於你喜歡誰的傳統的。這裏的GNU convention:
安裝
編譯程序,並複製可執行文件,庫等方面,他們應該存在的實際使用的文件名。
這似乎是一個明智的約定:安裝過期的可執行文件將會導致混淆。
make
如果您的依賴關係設置正確,則通過設計處理此問題。
如果make
構建一個名爲helloworld
的二進制文件。您可能會編寫您的install
目標,以便將此helloworld
二進制文件從源目錄複製到/usr/bin
。
這意味着安裝目標應該依賴於helloworld二進制文件,這也意味着如果二進制文件helloworld
不是最新的,它將被重新編譯。當你輸入make install時,你會默認呼叫make
(默認目標在這裏)。
eee ..我只是想知道你的問題實際上是關於安裝目標應該依賴於什麼? – Ben 2010-03-26 11:17:10
是的,編寫良好的makefile將有install
取決於正在安裝的可執行文件(或在all
),因此它會確保可執行文件在安裝前是最新的。
拆分有幾個原因。通常,默認目標是all
,並且不安裝這些文件,只構建它們。對於開發人員來說,這意味着他們可以輕鬆地在工作環境中構建源代碼,而不會影響系統的其他部分。對於最終用戶來說,這意味着他們可以以普通用戶身份運行構建,然後僅以root身份運行make install
。
這確實意味着在技術上,make
階段make; make install
是多餘的。
並注意*這是一件非常糟糕的事*。當以root身份運行'make install'時,編譯程序經常會做出像愚蠢的意外事情,例如delete/dev/null。 – 2011-03-23 04:10:41
在我的生活中從未見過。 @贊:所以你的建議是不運行'make install'作爲根?不知道該如何工作...... – 2011-03-23 10:03:58
不,我的建議是編寫不會自動構建的make install腳本。 – 2011-03-23 17:26:20