对于预编译的包,如何使用“安装”执行“make install”所做的所有操作?

cod*_*bie 2 fedora software-installation

我想知道make install在我刚刚编译了一个源包后成功运行这个命令后,我的系统会意识到新安装的包是什么。
让我们假设我已经从某个地方为我的发行版检索了一个预编译的 Linux 包,并且想要使用install而不是仅仅cp安装整个解压缩的包,/usr/local并确保我sudo make install为这个包执行典型的所有操作。我尝试运行sudo install -r -T ./[pre-compiled package] /usr/local旨在将所有内容递归复制到/usr/local,但它失败了,似乎什么也没做。

cas*_*cas 6

make install执行名为目标列出的命令install./Makefile(以及该安装任何其他尚未完成的目标的命令取决于-例如安装目标通常依赖于编译目标(S))。正如@Henrik 所说,这些可以是任何东西……复制文件、创建目录、设置所有权和/或权限、创建或复制初始配置文件等等。

顺便说一句,make installinstall命令是两个完全不同的事情。前者执行名为“install”的 Makefile 目标。后者是类cp固醇的一种奇特版本,可以设置所有者、组、权限,并执行许多其他在安装软件时有用的东西——install通常由 Makefile 中的安装目标使用。

无论如何,make并且make install与您想要做的事情几乎无关 - 安装预编译软件。

要安装预编译软件,如果您有发行版的软件包(例如 a.rpm.deb文件),则使用发行版打包工具安装它 - 例如dpkg在 debian/ubuntu、rpmfedora 等上。如果您没有副本包还没有,但它可以作为一个包你的发行版,然后使用apt(Debian的)或dnfyum(Fedora的)来获取并安装它。

对于不是适当发行版软件包的预编译软件(例如包含一堆文件的 tar.gz),并且您找不到源代码或软件包,最好的选择是使用像GNU这样的程序斯托或类似。

stow使安装未打包的软件变得相当容易,并且仍然能够在以后卸载它(例如准备升级到新版本)而不会留下大量孤立文件......这正是简单的解压缩或cp做。

非托管软件一团糟,等待发生。如果可能,请使用系统提供的打包工具。如果没有,请使用类似stow.


我昨天写这篇文章时打算提到的另一个程序是checkinstall,但直到现在我才想起它的名字。 checkinstall使您可以轻松制作功能性(如果不完美)的任何软件的软件包,否则您将使用make install. 它对于仅二进制预编译的程序(例如专有软件)用处不大,但在源代码可用时非常有用。