Как собирать программы вне Homebrew с зависимостями Homebrew keg_only
Что означает «keg-only»?
Краткое объяснение приведено в разделе FAQ.
Например:
OpenSSL не связан символической ссылкой с моим PATH, и сборки вне Homebrew не могут его найти!
Это происходит потому, что Homebrew изолирует его в отдельном префиксе, а не создает символическую ссылку на общедоступное расположение.
Рекомендации по возможным обходным решениям
Некоторые пользователи в такой ситуации либо принудительно связывают инструменты keg-only с помощью brew link --force, либо перемещают стандартные системные утилиты из PATH и заменяют их вручную созданными символическими ссылками на инструменты, предоставляемые Homebrew.
Пожалуйста, не удаляйте встроенные инструменты macOS и не заменяйте их принудительно символическими ссылками на инструменты Homebrew. Это может привести и, скорее всего, приведет к серьезным проблемам при попытке собрать программы.
brew link --force создает предупреждение в brew doctor, чтобы вы и сопровождающие пакетов знали о наличии ссылки, которая может вызывать проблемы. Если вы создали ссылку и никаких проблем нет? Можете не обращать внимания на ошибку brew doctor.
Как использовать эти инструменты вне Homebrew?
Если вы хотите использовать инструменты keg-only вне Homebrew, для этого существуют удобные и надежные альтернативы.
Флаги сборки
Можно задать флаги, чтобы направить сценарии configure или Makefiles в нужную сторону. Пример задания флагов:
./configure --prefix=/Users/Dave/Downloads CFLAGS="-I$(brew --prefix openssl)/include" LDFLAGS="-L$(brew --prefix openssl)/lib"
Пример использования pip:
CFLAGS="-I$(brew --prefix icu4c)/include" LDFLAGS="-L$(brew --prefix icu4c)/lib" pip install pyicu
Изменение PATH
Можно временно добавить в начало PATH каталог bin нужного инструмента, например:
export PATH="$(brew --prefix openssl)/bin:${PATH}" Это добавит каталог в начало PATH, чтобы любой сценарий сборки, выполняющий поиск в PATH, сначала находил его.
Изменение PATH с помощью этой команды действует только в течение текущего сеанса оболочки. После его завершения PATH возвращается к прежнему состоянию.
Обнаружение с помощью pkg-config
Если инструмент, который вы пытаетесь собрать, поддерживает pkg-config, можно изменить PKG_CONFIG_PATH, чтобы находить файлы .pc утилиты keg-only, если они есть. Не все формулы содержат такие файлы.
Например:
export PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig"
Если вас интересует переменная PKG_CONFIG_PATH, в man pkg-config приведены более подробные сведения.
Чтобы вывести стандартный путь поиска pkg-config, выполните:
pkg-config --variable pc_path pkg-config
Обнаружение Common Package Specification
CMake 4.3 и более поздних версий может считывать файлы .cps формата Common Package Specification из префиксов пакетов. Если инструмент, который вы пытаетесь собрать, использует CMake, а зависимость keg-only содержит файлы .cps, добавьте префикс этой зависимости в начало CMAKE_PREFIX_PATH:
export CMAKE_PREFIX_PATH="$(brew --prefix openssl):${CMAKE_PREFIX_PATH}"
© 2009–present Homebrew contributors
Licensed under the BSD 2-Clause License.
https://docs.brew.sh/How-to-Build-Software-Outside-Homebrew-with-Homebrew-keg-only-Dependencies