MacOS catalinaでhomebrewで入れたclangとclangdを使う方法
導入
MacOS catalinaを入れたら/usr/includeが蒸発
mojaveでも同様の事象が合ったが、別途/usr/includeを作る方法がサポートされていた。
しかし今回のアプデでそれがなくなり、xcodeの方からうまく今までの/usr/includeにあたるものを持ってくる必要がある。
clang
コンパイル時にsysrootオプションを付与する。
clang++ main.cpp -o main --sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
参考
https://anatofuz.hatenablog.com/entry/2019/10/09/174913
clangd
ソースコードと同階層のcompile_flags.txtに以下を書き込む
-I/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/include/c++/v1
-I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include
参考
https://twitter.com/false/status/1168529432115470337
追記
と思ったけどcompile_flags.txtにも同様に
--sysroot=/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk
を書き込んだらうまく補完が動いた。
原理的にはそりゃそうなんだろうけど、初めに試した時はうまく動かなかった。
compile_commands.jsonと干渉してたのか消した後に動いた。
更に追記
clang及びclang++については以下のようなエイリアスを設定
SYSROOT='/Library/Developer/CommandLineTools/SDKs/MacOSX10.15.sdk'
alias clang="clang --sysroot=${SYSROOT}"
alias clang++="clang++ --sysroot=${SYSROOT}"
そしてcompile_flags.txtについては、どこに置いておけばうまく読み込んでくれるのか(同階層にcompile_flags.txtがなかったら再起的に上の階層を読み込んでくれるのか)試していたら恐らくホームに置いておけば良いっぽいのでホームに置いた。
これで表面上は今までと同じように使えることになった。
追記及び補足(19/10/13)
pyenvでpythonをインストールしようとしたが、homebrewでインストールしたclangではpythonのビルドがうまくできなかった。
pyenvを使う時はシステムのclangに戻す必要があるかもしれない
追記(19/10/15)
SDKROOTなる環境変数を設定すれば良いらしい
https://qiita.com/imbsky/items/da709a514dded95b8575#_reference-3447ae53b2cd77fc530b
sysrootを指定する環境変数ありそうだなと思いつつググっても見つからなかったのでありがたい
終わり
xcodeが絡むといろいろ厄介だ
それにしても毎回オプションを付与したりtxtファイルを用意するのは面倒、makeファイル作るなり自動生成するなりするしかないのか
Author And Source
この問題について(MacOS catalinaでhomebrewで入れたclangとclangdを使う方法), 我々は、より多くの情報をここで見つけました https://qiita.com/coil_msp123/items/00bfa7a1e42602883882著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .