它提供了一個公式內容的路徑,它不會因版本升級而改變。
請考慮這種情況:假設您使用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 -lfoo
到gcc
。你的程序編譯。稍後,您升級到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的最新版本,即使你升級了它,即使它只是桶。
謝謝您的回答! (並且幫助我重新解答這個問題)所以我猜最安全的選擇是總是使用/ usr/local/opt,但是爲什麼Homebrew仍然使用/ usr/local/lib來創建非桶的符號鏈接? –