仅桶装自制配方
Posted
技术标签:
【中文标题】仅桶装自制配方【英文标题】:Keg-only homebrew formulas 【发布时间】:2011-06-09 03:36:03 【问题描述】:今天我通过homebrew
安装了curl
公式,但在安装它(并重新采购外壳)后我注意到:
% which curl
/usr/bin/curl
事实上,brew install curl
的输出表明它是一个 keg-only 公式,并且由于curl
已经存在于 OS X 中,它没有链接将其放入 Homebrew 前缀中,因为这可能会导致未指定的问题。
然后它继续说明
通常不会对您造成任何后果
我想知道:
究竟是什么样的问题? 通过 Homebrew 安装仅桶装配方的目的是什么?新安装的工具不在PATH
中怎么可能没有后果?
【问题讨论】:
我发现“通常对您没有任何后果”警告的措辞非常令人困惑,特别是提到LDFLAGS
和 CPPFLAGS
。我花了一段时间才意识到它是为所有仅桶装配方打印的。段落中断并没有清楚地说明信息的含义。
【参考方案1】:
问题:如果将自制应用程序放在相同的默认 OS X 版本前面的路径中,真的任何事情都可能发生。最常见的问题是由两个版本中可用的命令行选项集之间的差异或选项含义的差异引起的。对于 curl 来说,后果可能并没有那么糟糕,但对于其他应用程序来说,最坏的情况可能会破坏操作系统。
Keg-only:现在你有两个版本的 curl!默认的 OS X 和自制软件。如果您想使用不在默认值但在自制软件中的功能,您可以通过显式调用自制软件 curl 来实现。确切的路径取决于您如何设置自制软件。由于新安装的版本不在路径中,除非明确调用,否则不太可能导致问题。
【讨论】:
如果它们是动态链接的并且一个更新版本也可能会遇到问题 - 更新版本的 .so 可能会以比旧版本更高的优先级链接并破坏旧版本,特别是如果它们是非常不同的版本。 Git 已安装在 Mac OS X 10.8 上,但 Git Homebrew 公式并非仅限于小桶,即,它将git
“放在默认 OS X 版本前面的路径中”。可以吗?
@MattDiPasquale git 不是一个关键应用程序,我认为它是由 XCode 安装的。无论如何,这对您的system
来说不是问题
我可以使用不同的名称将新的 curl 添加到 PATH 中吗?像curl-new
而不是curl
?
@CMCDragonkai 你总是可以使用 shell 别名来这样做。 tldp.org/LDP/abs/html/aliases.html【参考方案2】:
我想对@asymmetric 提出的第二个问题(与仅桶的机制有关)添加一些补充。
HomeBrew 的前缀是 /usr/local
,并且 HomeBrew 将所有已安装的小桶保存在默认目录中,例如 /usr/local/Cellar
。一般来说,HomeBrew 可以为已安装的公式(非仅桶公式)创建符号链接,并且相应的符号链接保存在 /usr/local/bin
中。当 HomeBrew 安装公式时,此符号链接创建过程是自动的。这里的路径/usr/local/bin
将被称为默认(符号链接)前缀。
另一方面,根据 HomeBrew 的常见问题解答,我们有以下指导:
``keg-only 公式仅安装到地窖中,并且未链接到默认前缀中。这意味着大多数工具都找不到它。''
但与此同时,HomeBrew 会在目录 /usr/local/opt
中为 ALL 已安装的公式创建符号链接,无论它们是否仅用于小桶。
我们应该注意两个关键点:
-
默认情况下,默认(符号链接)前缀
/usr/local/bin
在 PATH
中,但非前缀 /usr/local/opt
不在 PATH
中。
默认情况下,默认(符号链接)前缀/usr/local/bin
通常指向最新版本的公式。因此,如果您想使用某些公式的特定版本(通常为仅桶格式),您可以暂时在您的 PATH
前面加上仅桶公式的 bin
目录,例如 export PATH="$(brew --prefix)/opt/FormulaName/bin:$PATH"
。
上面提到的/usr/local/opt
的设置可以解决可执行文件冲突。一般来说,你的系统中可能有一个公式或程序有很多不同的版本,比如最新版本和过时版本,苹果原生版本和本地安装版本等等。当您执行或编译一些与当前使用的公式或程序有些相关的其他程序时,这些情况可能会导致冲突。
【讨论】:
以上是关于仅桶装自制配方的主要内容,如果未能解决你的问题,请参考以下文章