首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >make和makepkg有什么区别?

make和makepkg有什么区别?
EN

Unix & Linux用户
提问于 2020-08-23 16:23:45
回答 1查看 3.9K关注 0票数 2

来自Arch Wiki

Arch中的包是使用makepkg实用程序构建的。在运行makepkg时,它搜索当前目录中的PKGBUILD文件,并按照其中的说明编译或以其他方式获取文件以构建包存档(pkgname.pkg.tar.xz)。生成的包包含二进制文件和安装说明,可以用pacman轻松地安装。

Make是一个GNU实用程序,用于从源代码构建和安装包,并为此在适当的目录中搜索makefile,该目录在make所需的输入中提供提要。

因此,makepkg用于使pacman可安装二进制文件,而且makepkg -si还可以解决依赖关系(主要用于AUR包)。这种依赖解决方案和pacman特有的东西之间有什么区别吗?它只是自动化的东西,可以由make手动完成,但在每个发行版。

我说的对吗?抱歉,如果这是个愚蠢的问题。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-08-23 19:40:40

TL;

博士

makepkg相对于make的优势:

  • 抽象构建系统(makeconfigurecmakeqmakenpmpybuildninjapybuild)
  • 管理依赖项(构建和运行时)
  • 创建可分发或安装的包。
  • 允许发行版特定的修补程序或配置。
  • 支持安装/卸载/升级脚本
  • 跟踪系统上的文件,这样您就知道为什么安装了特定的文件(谁拥有它)。
  • 使卸载更容易。
  • 使升级更容易(源代码包中重命名的文件不会留下孤儿,脚本可以安全地迁移数据库)。

--verbose

make将在当前目录中执行一个MakeFile,构建所需的目标。make install将尝试将这些目标安装到DESTDIR中。

makepkg -i是基于PKGBUILD的规则构建的。这可能是:

代码语言:javascript
复制
configure
make
make install DESTDIR=/usr

代码语言:javascript
复制
cmake .
cmake --build . -DCMAKE_INSTALL_PREFIX=/usr -DCMAKE_BUILD_TYPE=Release
ctest .
cmake --build . --target=install

或任何一种

代码语言:javascript
复制
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开发人员将编写PKGBUILD文件,然后构建机器将解析这些文件,构建包,并将它们上传到官方存储库,以便您可以使用pacman下载/安装它们。

使用makepkg而不是make install的另一个优点是,您的包管理器保存了安装的内容、位置和版本的索引。这意味着,如果您对系统上的文件有什么疑问,您应该能够查询包管理器,它将告诉您哪个包“拥有”该文件以及它的版本。卸载包时,包管理器知道所有文件,这样它就不会留下任何孤立的东西。升级包时,包管理器知道在安装过程中替换/重命名/删除哪些文件,还可能运行一两个脚本以确保迁移顺利。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/605928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档