Build the toolchain

Understand the Homebrew prefix

Use Homebrew’s reported prefix instead of hard-coding an Intel or Apple silicon installation path.

10 minute lesson

~~~

Homebrew installs everything under one root directory, its prefix. The prefix is not the same everywhere: on Apple silicon it is /opt/homebrew, on Intel Macs it is /usr/local. Same tool, two layouts, and the difference is exactly the architecture split from the previous module.

Scripts that assume /usr/local or /opt/homebrew fail as soon as the environment changes — a teammate on older hardware, a CI runner, your own next Mac.

Ask Homebrew, don’t guess

Homebrew will tell you its own paths:

brew --prefix
# /opt/homebrew
brew --repository
# /opt/homebrew
brew --cellar
# /opt/homebrew/Cellar

The prefix is where binaries get linked (/opt/homebrew/bin), the repository is Homebrew’s own checkout, and the Cellar is where each formula’s versioned files actually live.

When a script needs the location of something Homebrew installed, use command substitution:

export LDFLAGS="-L$(brew --prefix openssl@3)/lib"

brew --prefix openssl@3 resolves the real, current path of that formula on this machine. The same line works on Intel and Apple silicon.

Use command substitution only where a tool genuinely needs an absolute prefix, like linker flags. Prefer command -v when you only need the executable selected by the current PATH:

command -v node
# /opt/homebrew/bin/node

The two-prefix trap

On Apple silicon, /opt/homebrew/bin is not on the default PATH. The installer tells you to add this line to ~/.zprofile:

eval "$(/opt/homebrew/bin/brew shellenv)"

brew shellenv prints the exports for the correct prefix; eval applies them. Skip it and every brew-installed tool is invisible to new shells.

Here is the realistic failure: a Mac that once ran a translated x86_64 shell can end up with two Homebrew installations — an Intel one in /usr/local and a native one in /opt/homebrew. Both work, and PATH order silently decides which one serves each command. The tell is brew --prefix saying /usr/local on an arm64 Mac, or file $(command -v node) reporting x86_64. When you see that, pick the native install, migrate your formulas to it, and remove the Intel one deliberately.

Lesson completed

Take this course offline

Get every free book and course as PDF and EPUB files.

Get the download library →