为什么Homebrew创建一个/ usr / local / opt目录,我应该使用它?

我在使用自制软件方面很新颖,我想弄明白在我自己的项目中如何使用一些库(例如boost,gsl,openblas)。

我了解到每个公式都是由Homebrew在/ usr / local / Cellar /中安装的,然后在usr / local / bin,usr / local / lib,usr / local / include中进行symlink,所以看起来似乎是这样,除了仅用于桶的公式所以它不会混淆操作系统已经安装的库(参见例如了解自制软件和桶只依赖项)。 但是我发现每个公式都链接到/ usr / local / opt目录。

所以我的问题是为什么有这个/ usr / local / opt目录(这是多余的),我必须使用什么路径来使用公式(usr / local / Cellar或usr / local /或usr / local /基本上选择)?


它为公式的内容提供了一条路径,不会因版本升级而改变。

考虑这种情况:假设你使用Homebrew构建libfoo.dylib 。 它是2.0.0版本,因此它位于/usr/local/Cellar/libfoo/2.0.0/lib/libfoo.dylib 。 你想从另一个你正在构建的程序链接到它,所以你将-L/usr/local/Cellar/libfoo/2.0.0/lib -lfoogcc 。 你的程序编译。 稍后,您升级到libfoo 2.0.1并删除v2.0.0。 现在/usr/local/Cellar/libfoo/2.0.0/lib/libfoo.dylib不再存在,并且您的程序不再运行,因为它无法动态加载libfoo。

没关系。 libfoo.dylib也可在/usr/local/lib/libfoo.dylib 。 这是libfoo最新版本的符号链接,所以它应该始终存在。 所以你把-L/usr/local/lib -lfoo传给你的程序并编译它。 稍后您升级到libfoo 2.0.1。 没问题,因为/usr/local/lib/libfoo.dylib仍然存在,并指向v2.0.1副本。

这很棒,而且Homebrew只用那个系统存在了一段时间。 问题是,一些公式是“桶只”,所以它们没有从/usr/local符号链接。 (一般来说,它们只是因为它们影响OS X附带的库的版本,并且取代OS X库会导致问题。)假设您想链接到库的仅桶版本。 它不是从/usr/local/lib ,所以你必须提供安装在/usr/local/Cellar的版本的完整路径,这会回到上面列出的第一个问题。

/usr/local/opt解决了这个问题。 它为符号链接的所有公式的当前版本提供了一个位置,而不管它们是否仅仅是小桶。 现在,当你想编译你的程序时,你可以使用-L/usr/local/opt/libfoo/lib -lfoo ,并且你的程序将链接到最新版本的libfoo,即使你升级它,即使它是小桶只。


只是为了补充mipadi的答案。

从一个恰当地命名为“/ usr / local / opt”的文章

将文件存储在一致的位置是保持系统清洁和可维护的重要部分。 在大多数Linux系统上,大部分软件都使用软件包管理器进行安装。 软件包管理器会跟踪安装的文件,因此它可以以最小的副作用更新和删除软件。

然而,有些时候软件不能通过软件包管理器进行安装。 为了最大限度地减少文件系统的副作用,此类软件安装在/ usr / local目录中。 UNIX风格的软件安装将文件放入本地根目录下的bin,lib,share等子目录中,但将软件安装到特定于软件包的目录中并添加本地根目录的软链接非常常见。 这样做可以轻松删除软件 - 只需删除特定于软件包的目录以及指向它的任何链接即可。

某些软件提供了本地安装说明,以便直接在/ usr / local中创建特定于软件包的目录。 这不会促进良好的组织,因为它将UNIX层次结构目录与特定于软件包的目录混合在一起。 将软件安装到特定于软件包的目录中已经在/ opt目录中的其他地方完成了,因此遵循相同的约定并将本地安装的特定于软件包的目录放在/ usr / local / opt目录中是有意义的。

在目录名中包括版本号不是必需的,但对于本地安装的软件来说是一个好的做法,因为它允许同时安装和测试多个版本。 要运行特定版本的软件,请直接在软件包目录下运行该可执行文件。 通过控制从/ usr / local / bin链接到哪个可执行文件,可以将任何版本设置为默认版本。 例如,可以在不删除旧版本的情况下安装和测试新版本的软件。 当新版本准备就绪时,/ usr / local / bin中的链接可以更新为指向它。 旧版本的软件可以在不再需要时删除。

来源:Copyright©2014 Extellisys

链接地址: http://www.djcxy.com/p/75475.html

上一篇: Why is there a /usr/local/opt directory created by Homebrew and should I use it?

下一篇: homebrew not working on OSX