`make install` 會覆蓋檔案嗎?

`make install` 會覆蓋檔案嗎?

我花了一些時間在 Mac Os X 10.6.8 上安裝較新版本的 Apache2.x。

當透過 ./configure 設定 apache 時,我指定了 Darwin 佈局。此佈局假定現有 apache 安裝的路徑設置,這正是我想要的,因為我的目標是取代舊的。

我運行了 make,然後當然是 sudo make install。

我透過以下方式檢查了 apache 版本

apachetcl -v

我得到了

Server version: Apache/2.4.1 (Unix)
Server built:   Mar 31 2012 01:52:54

這很好。但這是奇怪的部分。我檢查了 /etc/apache2 中的「舊」httpd.conf 文件,它有一個舊的修改日期。

直到我嘗試運行 apache 之後我才真正弄清楚這一點。 Apache 嘗試載入一些與新版本不相容的擴充功能。

這導致我檢查了 /usr/libexec/apache2 目錄,我發現除了兩個或三個模組外,最近沒有修改過這些模組。本質上 sudo make install 並沒有覆蓋每個可能的檔案。

What is the convention here? Should make install overwrite everything or not?

我假設這僅取決於開發人員如何編寫配置腳本和 Makefile。

在再次運行 make install 之前,我最終對我所知道的任何現有 apache 目錄做了一些 rm -rf 。之後,一切都是新鮮的。

答案1

Makefile關於唯一發生的事情是在它或運行的配套腳本中定義的,您是正確的。從來源升級軟體時的「最佳實務」通常是uninstall在未執行make clean或刪除原始來源安裝目錄的情況下使用該選項。

但您必須小心,如果程式在/usr/local您外部安裝了文件,則可能會刪除套件管理器新增的文件。通常,像 Apache 這樣的主要設定檔不會被破壞,而是在安裝過程中簡單地刪除,它們可以或保留。儘管情況並非總是如此。您可以使用-b--backup安裝選項備份每個目標。

編輯: 查看它Makefile.in的當前版本,httpd看起來他們的幾個cp命令添加了-p保留所有權和時間戳的開關。

相關內容