Arch-Linux

make 和 makepkg 有什麼區別?

  • August 23, 2020

來自Arch Wiki

Arch Linux 中的軟體包是使用該makepkg實用程序建構的。當 makepkg 執行時,它會在目前目錄中搜尋PKGBUILD文件並按照其中的說明編譯或獲取文件以建構包存檔 (pkgname.pkg.tar.xz)。生成的軟體包包含二進製文件和安裝說明,可以使用 pacman 輕鬆安裝。

Make是一個 GNU 實用程序,用於從原始碼建構和安裝軟體包,並為此在適當的目錄中搜尋生成文件,該目錄將所需的輸入提供給make.

Somakepkg用於製作 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是,您的包管理器會保留已安裝內容、位置和版本的索引。這意味著如果您對系統上為什麼存在文件有疑問,您應該能夠查詢包管理器,他會告訴您哪個包“擁有”該文件以及它是哪個版本。當您解除安裝包時,包管理器知道所有文件,因此它不會留下任何孤立的文件。當您升級包時,包管理器知道在安裝過程中要替換/重命名/刪除哪些文件,並且還可能執行一兩個腳本以確保順利遷移。


引用自:https://unix.stackexchange.com/questions/605928