Linux - 進行安裝而不替換符號鏈接

Linux - 進行安裝而不替換符號鏈接

我最近(愚蠢的是,因為這裡有一個簡單的解決方案,我將--prefix=選項設為預設值以外的其他值/usr/binconfigured 和maked gcc-4.9.1,而不設定該--prefix=選項。我真的不想重做make整個事情,因為這會花費相當多的時間。

我的/usr/bin/目錄已包含gcc-4.8.2由作業系統(Ubuntu-14.04)安裝的 。關鍵點是現有的符號連結都指向諸如gcc-4.8, 之類的東西,並且將在命令後被替換make install為等的符號連結gcc-4.9g++-4.9

我可以向 傳遞一個參數make,告訴它不要替換已經存在的符號連結嗎?或類似?

答案1

首先,請注意預設前綴除非明確指定,否則最常見的是 /usr/local。因此,在您的情況下,覆蓋 /usr 中的安裝甚至可能不是問題,儘管在 /usr 中一個 GCC 和 /usr/local 中另一個 GCC 肯定會導致混亂。

雖然我不確定它是否專門適用於 gcc-4.9.1(儘管我看不出有什麼理由它不會),autoconf(生成腳本configure)提供了以下功能:在安裝時覆蓋前綴。

引用autoconf 文檔,「安裝名稱」部分:

影響安裝位置最便攜的方法是傳遞正確的位置進行配置;但是,許多軟體包提供以下一種或兩種快捷方式,將變數分配傳遞到「make install」命令列,以更改安裝位置,而無需重新配置或重新編譯。

第一種方法涉及為每個受影響的目錄提供一個覆蓋變數。例如,「make install prefix=/path/to/alternate」會選擇一個備用位置,並影響以「${prefix}」表示的所有其他目錄配置變數(或者,換句話說,所有在配置過程中指定的目錄(但不是根據公共前綴)必須在安裝時覆蓋每個目錄,以便重新定位整個安裝)。 GNU 編碼標準要求採用 makefile 變數覆寫每個目錄變數的方法,理想情況下不會導致重新編譯。然而,某些平台已知共享函式庫語意的限制,最終需要在使用此方法時重新編譯,在使用 GNU Libtool 的套件中尤其明顯。

第二種方法涉及提供“DESTDIR”變數。例如,「make install DESTDIR=/path/to/alternate」將在所有安裝路徑之前新增「/path/to/alternate」。 GNU 編碼標準不要求「DESTDIR」覆蓋方法,且不適用於具有磁碟機號碼的平台。另一方面,它可以更好地避免重新編譯問題,即使在配置時未根據“${prefix}”指定某些目錄選項,它也能正常工作。對於支援「DESTDIR」的軟體包,該變數應在配置和「make all」期間保持未定義狀態,並且僅在「make install」期間指定。

所以make install DESTDIR=/opt/gcc-4.8.2 應該做你想做的事。之後您可能需要稍微移動文件,具體取決於您想要的確切目錄結構,但這對於開始來說應該足夠了。

請注意,我還沒有測試過這個;您需要自行承擔風險。

相關內容