make 和 makepkg 有什麼區別?
來自Arch Wiki:
Arch Linux 中的軟體包是使用該
makepkg
實用程序建構的。當 makepkg 執行時,它會在目前目錄中搜尋PKGBUILD
文件並按照其中的說明編譯或獲取文件以建構包存檔 (pkgname.pkg.tar.xz)。生成的軟體包包含二進製文件和安裝說明,可以使用 pacman 輕鬆安裝。
Make
是一個 GNU 實用程序,用於從原始碼建構和安裝軟體包,並為此在適當的目錄中搜尋生成文件,該目錄將所需的輸入提供給make
.So
makepkg
用於製作 pacman 可安裝的二進製文件,並且makepkg -si
可以選擇解析依賴項(主要用於 AUR 包)。只是這個依賴解析和 pacman 特定的東西有區別嗎?它只是自動化的東西,可以make
在每個發行版上手動完成。我對麼?對不起,如果這是一個愚蠢的問題。
TL;博士
優勢:
makepkg
_make
- 抽象建構系統 (
make
,configure
,cmake
,qmake
,npm
,pybuild
,ninja
,pybuild
)- 管理依賴項(建構和執行時)
- 創建可以分發或安裝的包
- 允許特定於發行版的更新檔或配置
- 支持安裝/解除安裝/升級腳本
- 跟踪系統上的文件,以便您了解安裝特定文件的原因(誰擁有它)
- 使解除安裝更容易。
- 使升級更容易(源包中的重命名文件不會留下孤兒,腳本可以安全地遷移數據庫)。
--verbose
make``MakeFile
將在目前目錄中 執行 a ,建構所需的目標。make install
將嘗試將這些目標安裝到DESTDIR
.
makepkg -i
基於PKGBUILD
. 這可能是:configure make make install DESTDIR=/usr
或者
cmake . cmake --build . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release ctest . cmake --build . --target=install
或任何
cargo build --release npm --build pybuild qmake ...
有很多建構系統。
make
只是其中之一,而且通常只是其中的一部分(例如 autoconf)。PKGBUILD
是一種很好的方式,因此 Arch 包使用者(或建構機器)可以使用單個命令 (makepkg
) 而無需了解有關建構系統的任何資訊。它旨在定義如何建構包而不是如何建構原始碼。
PKGBUILD
還提供了定義建構依賴或執行時依賴的機會。這意味著如果您需要cmake
建構一個包,它將自動安裝(如果-s
指定)並自動刪除(如果-r
指定)。如果您的軟體包依賴於python3
,那麼它將確保python3
自動安裝在您的系統上。
PKGBUILD
還為 Arch 維護人員提供了將自己的更新檔/自定義添加到原始源包的可能性。如果上游包安裝了一個可執行的庫/usr/lib/
,但 Arch 的標準更願意在 中包含這些/usr/libexec/
,那麼該PKGBUILD
文件允許這些自定義。如果您不使用該
-i
選項,makepkg
則不會嘗試安裝建構。相反,輸出是一個.tar.xz
文件,可以上傳到存檔並由其他使用者使用pacman
. 這就是官方 Arch 儲存庫的工作方式。Arch 開發人員將編寫
PKGBUILD
文件,然後建構機器將解析這些文件,建構包,並將它們上傳到官方儲存庫,以便您可以使用pacman
它們來下載/安裝它們。
makepkg
使用over的另一個優點make install
是,您的包管理器會保留已安裝內容、位置和版本的索引。這意味著如果您對系統上為什麼存在文件有疑問,您應該能夠查詢包管理器,他會告訴您哪個包“擁有”該文件以及它是哪個版本。當您解除安裝包時,包管理器知道所有文件,因此它不會留下任何孤立的文件。當您升級包時,包管理器知道在安裝過程中要替換/重命名/刪除哪些文件,並且還可能執行一兩個腳本以確保順利遷移。