Make
執行 make 移動二進製文件時 Homebrew 拋出錯誤
我正在嘗試為自製軟體編寫一個公式來安裝我製作的 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
在編寫自己的公式之前,請閱讀開發人員文件和一些現有的公式程式碼。