Make

執行 make 移動二進製文件時 Homebrew 拋出錯誤

  • September 12, 2019

我正在嘗試為自製軟體編寫一個公式來安裝我製作的 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

你做事不對。禁止將二進製文件或其他任何內容直接安裝到公式中/usr/local/bin

作為一個公式,它應該將其所有內容安裝到一個類似的路徑/usr/local/Celler/<formula-name>/<version>中,該路徑稱為prefix路徑,#{prefix}在 ruby​​ 中由表示。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

在編寫自己的公式之前,請閱讀開發人員文件和一些現有的公式程式碼。

引用自:https://unix.stackexchange.com/questions/541284