`make` 可以自动安装依赖吗?

Dig*_*nja 7 make dependencies

当我使用makemake install方法安装程序时,在开始安装新程序之前(通常)需要安装许多依赖项。因此,目前,每次收到错误消息表明缺少依赖项时,我都会手动安装每个依赖项。

我可以看到它make的手册页没有列出任何简单的选项来继续和自动安装依赖项,所以我想知道是否有解决方法或脚本来实现这一点?

ori*_*ion 5

这不是 makefile 的用途。Makefile 只处理构建软件并将其以通用方式安装到系统中(没有包管理器)。它不关心(也不应该关心)您是否有实际运行应用程序的要求。那是设计使然。考虑几点:

1) 如果您的发行版使用了包管理器(几乎所有这些都以某种方式使用),您make install无论如何都不应该直接调用,因为这会绕过包管理器并污染您的系统。在这种情况下make install,在构建包时在“沙箱”环境中调用,安装被打包,包由您选择的包管理器安装和处理。

2)不应该要求以“正确”的顺序安装所有东西。事实上,这肯定会导致循环依赖,并且无法安装。甚至包管理器通常对此过于严格,这会导致问题。此外,当您构建一个包(一个 buildscript 调用make install)时,您实际上并不打算运行该程序,并且可能没有安装任何要求。毕竟,您只是在构建一个将安装在其他计算机上的软件包。

3)没有一种可移植的方式来做到这一点。您make install的定义与平台无关,如何知道在哪里寻找需求(硬连线网址之类的?那会在一秒钟内中断!)。它不能通过包管理器,因为它必须在所有可能性上运行,包括您没有预料到的未来 - 版本也会发生变化。

4) 没有唯一的决定安装什么。共享库可以由不同的包提供。libc甚至不止一个。还有不止一个提供 OpenGL 功能的包(不同的显卡)、不同的矩阵代数包、不同的媒体播放库(vlc 与 gstreamer),我可以继续使用很长时间。您可以选择如何设计系统和使用哪些组件,这是这种模块化设计的美妙之处(而不是将所有内容都放在一张 CD/DVD 上的旧 Windows 经典,因此每个库都通过不同的软件包安装了一千次,并且每个应用程序的安装量不应超过 10MB,设计合理)。

5) 这不是 的工作make install,而是不同级别的维护。configure && make && make install处理检查您已安装的内容(用于构建时依赖项)、编译代码并显示文件应放置的位置。您需要哪些其他软件版本的要求属于打包和分发领域,这是一个单独的过程——包管理器,或者系统管理员,如果他以传统方式安装东西。你永远不应该混合这两个概念 - 它会导致混乱。如果将事物划分为明确定义的层,则开发人员可以独立于打包者和发行版维护者更改事物:如果发行版决定重新打包具有不同名称的事物并使用不同的替代方案,将事物放在不同的目录中,他们不应该期望应用程序负责 makefile 的开发人员了解或关心这一点。

简而言之 - 无论依赖项是构建时依赖项(没有它make不能运行 - 通常由configure脚本检测),还是运行时依赖项,都不应该在 makefile 级别完成。请不要以错误的方式做事并考虑标准。如果您正在处理还没有包的东西(检查用户提供的包,它可能已经存在),您应该调查需要什么并实际构建包 - 这对其他人也更好,然后他们可以享受你做的包。