1.環境
macOS : Big Sur 11.6.1
ROOT (CERN) : 6.24.06
VScode : 1.62.2 (Universal)
2024/04/01 追記 著者は2022年に上記の環境で作りましたが、最新のmac OS, Linux 環境でも動きます。というか、基本OS等のバージョンによることはないと考えています。
ただし、後述のC/C++ 拡張機能のバージョンには依存する可能性があります。ver1.19.9では動くことを確認しました。
2.この記事の対象
ROOT(CERN)をVScodeでよく書く方向け。
3.症状
VScodeってそのままだと、ROOTにインテリセンスが働かないんですよね。だから
こんなエラーがめちゃくちゃでてくると。不快だっっっっっ!!!!!!
しかも、インテリセンスが使えないと、自動補完できないのでVScodeの強みも半減なんですよね。
ということで、設定をいじってROOTに対してもインテリセンスが動くようにします。
4.解決策
4.1 C/C++の拡張機能のインストール(インストール済みなら飛ばすこと)
-
shift+command+X
またはサイドバーから「拡張機能」メニューを開く - 検索窓(Marketplaceで拡張機能を検索する)に「C/C++」と打ち込む
- C/C++の欄の「インストール」を押す
インストールした後の写真を添付します。写真一番上の拡張機能だけをインストールすれば大丈夫です。インストール前であれば、写真の歯車の部分が「インストール」となっているのでそこを押します。
4.2 設定の編集
"C_Cpp.default.includePath": [
"${default}",
"(ROOTの入っているディレクトリ)/**"
]
(ROOTの入っているディレクトリ)は各自の環境に合わせてください。自分はHomebrewでrootをインストールしたのですが、自分はC_Cpp.default.includePath
の2文目のところを
usr/local/Cellar/root/6.24.06/**
としています。
これで設定は完了です。
ちなみに、**をつけないと含まれるファイルを下のディレクトリまで(再帰的に)参照してくれないので注意しましょう。
4.3 マクロを書く
他の言語と同じように各クラスに対応するヘッダファイルをインクルードします。すると、TFile等のクラスが読み込まれ、インテリセンスが働いていることがわかると思います。
5. おまけ 作業ファイルごとにインテライセンスを設定する
今までは、VScodeで読み込むファイル全体にインテリセンスがはたらくようにしました。
しかし、作業するディレクトリ毎に設定を変えたいこともあると思います。
この場合は作業ディレクトリにある.vscode/c_cpp_properties.json
内の
includepath
を編集しましょう。編集方法は4.2節の方法と同じです。
6. 解説
拡張機能C/C++はヘッダファイルを読み込むことで、自動補完などを行います。しかし、デフォルトでは、ROOTのヘッダファイルはC/C++が読み込む対象にはなっていないので、インテリセンスが働きません。そこでC_Cpp.default.includePath
の設定で、ROOTヘッダファイルのディレクトリへPATHを通し、C/C++がROOTのヘッダファイルを認識できるようにしています。
最後に、間違い、改善点、やってもうまく行かない等ありましたら、コメントいただけると幸いです。
7.参考
https://root.cern/blog/root-on-vscode/
こちらも記事と合わせて読むことをおすすめします。(英語ですが)windowsやlinux環境の方はまずこちらを読むほうが良いかもしれません。著者のAlberto氏が制作された拡張機能ROOT File Viewerもぱっと図を確認するのに便利です。
https://root-forum.cern.ch/t/autocompletion-with-vs-code/38188/2
こちらも。少し説明不足ではありますが、設定について書かれています。
https://code.visualstudio.com/docs/cpp/c-cpp-properties-schema-reference
C/C++拡張機能の設定についても読んでおくとよいです。