从源代码安装某些东西时(例如,Ruby 1.9.2),我可以运行什么命令来获取完全的安装该应用程序所需的所有依赖项的列表?这可能吗?
答案1
简短回答:不可能。从源代码发行版获取准确依赖项的困难是包管理在 Linux 上如此流行的原因(好吧,这是几个原因之一)。事实上,如果你只需要完成它而不关心如何完成,那么获取依赖项的最可靠方法可能是获取一个发行版包(gentoo ebuilds 很容易使用)并拉出以下列表:依赖于此。
否则,如果幸运的话,维护者将在自述文件或类似文件中创建依赖项列表 - 这将是第一个要检查的地方。如果做不到这一点,如果它是一个 C 项目并且您不介意亲自动手,您可以查看配置脚本(或者更好的是 configure.ac 或它生成的任何内容)的内部,并根据内容找出依赖关系它会检查。
答案2
从源头构建
我不知道有任何编程方式,我通常会浏览发行说明和/或软件自述文件以获取总体概念。这实际上是一个迭代过程,我可能会找到一两个我没有或错过的库,需要去获取它们。
使用包管理器构建
另一方面,如果您正在使用诸如apt
或 之类的包管理器yum
,那么您可以在安装/构建相关包之前寻求这些系统的帮助来帮助提前安装所有依赖项。
基于 apt 的发行版
$ sudo apt-get build-dep <package>
基于 yum 的发行版
$ sudo yum-builddep --nogpgcheck <source package>
-或者-
$ sudo yum-builddep --nogpgcheck <package>
答案3
总的来说,我也不能给你一个100%的解决方案,但对于大多数使用的来源自动工具,您可以grepconfigure.ac
查找AC_SEARCH_LIBS
和AC_CHECK_HEADERS
。PKG_CHECK_MODULES
第一个参数AC_CHECK_HEADERS
是文件名,甚至是带有文件名的路径。
PKG_CHECK_MODULES
被介绍为pkg 配置并且,IIRC 的第二个参数包括必须存在PKG_CHECK_MODULES
文件的包名称<pkg-name>.pc
。
第二个参数AC_SEARCH_LIBS
是库名称,使用 Linux,您正在查找以lib<second-argument-to AC_SEARCH_LIBS>.so
.
这些都不是完美的,这不需要给你一个完整的要求列表,但是......
源代码维护者越来越有兴趣看到这三件事将引导您获得完整的需求列表。
通过一些脚本,您可以使用这三个东西来搜索您的发行版的包,并找到为您提供丢失文件的包。例如
apt-file search
,如 Faheem Mitha 所提到的,用于所有基于 Debian 的 Linux。
答案4
在 Ubuntu(Debian)中:sudo apt-get build-dep <package>