はじめに
homebrew でインストールしたCライブラリは$(brew --prefix)/include
や $(brew --prefix)/lib
にシンボリックリンクが張られる.
Intelでは brew --prefix
が /usr/local
だったため, コンパイラのデフォルトでパスに入っていた.
しかしAppleシリコンでは brew --prefix
が /opt/homebrew
のため, 自前でパスを追加する必要がある.
設定方法
コンパイル時のオプションで -I
や -L
を追加すればいいが,
毎回指定するのが煩雑な場合は CPATH
(または C_INCLUDE_PATH
, CPLUS_INCLUDE_PATH
) と LIBRARY_PATH
に追加することもできる.
全体 (シェル) で設定する場合
下記のようにシェルで実行するか, ~/.zprofile
に書く.
if [[ -d /opt/homebrew ]] ; then # ifの条件は適宜編集するか削除する
export CPATH="/opt/homebrew/include:${CPATH}"
export LIBRARY_PATH="/opt/homebrew/lib:${LIBRARY_PATH}"
fi
なお参考で brew shellenv
はこうなっている.
export HOMEBREW_PREFIX="/opt/homebrew";
export HOMEBREW_CELLAR="/opt/homebrew/Cellar";
export HOMEBREW_REPOSITORY="/opt/homebrew";
export PATH="/opt/homebrew/bin:/opt/homebrew/sbin${PATH+:$PATH}";
[ -z "${MANPATH-}" ] || export MANPATH=":${MANPATH#:}";
export INFOPATH="/opt/homebrew/share/info:${INFOPATH:-}";
また, 特定のCライブラリだけパスを通したい場合は, 下記のとおり.
if [[ -d /opt/homebrew ]] ; then # ifの条件は適宜編集するか削除する
export CPATH="$(brew --prefix googletest)/include:${CPATH}"
export LIBRARY_PATH="$(brew --prefix googletest)/lib:${LIBRARY_PATH}"
fi
なおパスはこうなっている.
$ ls -lhFG $(brew --prefix googletest)
lrwxr-xr-x@ 1 skkzsh admin 27B 8 23 11:57 /opt/homebrew/opt/googletest@ -> ../Cellar/googletest/1.15.2
$ ls -1FG $(brew --prefix googletest)/
INSTALL_RECEIPT.json
LICENSE
README.md
include/
lib/
sbom.spdx.json
$ ls -1FG $(brew --prefix googletest)/include
gmock/
googlemock/
googletest/
gtest/
$ ls -1FG $(brew --prefix googletest)/lib
cmake/
libgmock.a
libgmock_main.a
libgtest.a
libgtest_main.a
pkgconfig/
makeのときだけ設定する場合
Makefile
に下記のように追加する.
Makefile
ifeq ($(shell uname -p), arm) # ifの条件は適宜編集するか削除する
export CPATH := /opt/homebrew/include:$(CPATH)
export LIBRARY_PATH := /opt/homebrew/lib:$(LIBRARY_PATH)
endif
確認環境
$ g++ -v
Apple clang version 15.0.0 (clang-1500.3.9.4)
Target: arm64-apple-darwin23.4.0
Thread model: posix
InstalledDir: /Library/Developer/CommandLineTools/usr/bin