How to do everything that 'make install' does with 'install' for a pre-compiled package?

How to do everything that 'make install' does with 'install' for a pre-compiled package?

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

答案1

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

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

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

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

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

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

不受管理的软件会造成混乱。如果可能的话,使用系统提供的软件包工具。如果没有,请使用类似的东西stow


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

相关内容