我正在尝试编写一个自制程序的公式来安装我制作的 C++ 工具。我的 makefile 中有以下规则将binaryFile
文件复制到/usr/local/bin
:
install:
@install -m 0755 binaryFile /usr/local/bin
当我运行时make install
,它正确复制binaryFile
到/usr/local/bin
.
但是,当我brew install
打包时,运行时出现以下错误make install
:
install: /usr/local/bin/binaryFile: Operation not permitted
make: *** [install] Error 71
我已经做了一些阅读,大多数地方都说,当出现此错误时,请使用/usr/local/bin/
而不是/usr/bin
- 这就是我已经在做的事情。我不明白为什么当 homebrew 运行 make install 时它的行为与我手动运行它时不同。
要查看我遇到的确切问题:
brew tap k-vernooy/tap
brew install terminalgol
答案1
你没有做正确的事情。一个公式是禁止的直接安装二进制文件或其他任何东西/usr/local/bin
。
作为一个公式,它应该将其所有内容安装到类似 的路径中/usr/local/Celler/<formula-name>/<version>
,该路径称为路径,在 ruby 中prefix
表示为。 #{prefix}
Homebrew 会将bin/
其下子文件夹中的二进制文件符号链接#{prefix}
到/usr/local/bin
.
ruby 中的变量#{prefix}
由 Homebrew 自动计算,遵循我上面提到的模式。
prefix
您应该做的就是在编译和构建之前告诉配置文件这一点。
class Wget < Formula
homepage "https://www.gnu.org/software/wget/"
url "https://ftp.gnu.org/gnu/wget/wget-1.15.tar.gz"
sha256 "52126be8cf1bddd7536886e74c053ad7d0ed2aa89b4b630f76785bac21695fcd"
def install
system "./configure", "--prefix=#{prefix}"
system "make", "install"
end
end
在编写自己的公式之前,请阅读开发人员文档和一些现有的公式代码。