[Vim] coc.nvim + coc-clangdの構文チェックでboostのエラーが発生する

2020年8月14日金曜日

C++ vim

t f B! P L

C++の拡張ライブラリ、Boost。

AtCoderでも使用が認められているライブラリです。


様々な便利機能が搭載されています。

競技プログラミングで使えるBoostライブラリ 初級編から一部抜粋すると、
  • boost::multiprecision::cpp_int では多倍長整数を扱うことができます。(10の100乗とか)
  • boost::algorithm::replace_all では文字列の中の要素をすべて別の要素に置き換えることができます。

このライブラリの導入について手間取ったので、残しておきます。

環境

macOS Catalina 10.15.6

Vim --version 8.2

iTerm2 Build 3.3.12

はじめに

前提として、coc.nvimのインストール、環境構築は済ませておいてください。

python3とかのインストールが必要となって、これも少しめんどくさいですが、他の方がまとめてくださっています。

googleで調べるなり、公式Readme読むなりで終わらせておいてください。


coc.nvimが普通に動くこと(LSPサーバーが動くこと)前提にここからは進めていきます。

coc-clangdのインストール

vimを開き、

 :CocInstall coc-clangd 

と入力すると、自動でcoc.nvimがchangdのインストールを行ってくれます。


基本的なC++補完はこれでOKです。

Boostのインストール

ここから本題です。

Homebrewを使ってBoostをインストールします。


ターミナルにて


 brew install boost 

でインストールされます。


これで終了です。サクッと終わります。

コンパイルしてみる

では試しに以下のcppファイルをコンパイルしてみましょう。

(test.cpp)

#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace std;
using boost::multiprecision::cpp_int;

int main() {
  cpp_int a, b;
  cin >> a >> b;
  cout << a*b << endl;
}

おそれらく現段階では補完も効かず、構文チェックでエラーが発生していると思います。

#include <boost/~~~> の部分では "file not found"となっているはずです。

(他のところでもundefinedとかになっているはずです。)


まあ、今は無視してコンパイルしてみます。


コンパイルオプションに


 -I/usr/local/include 

を追加してBoostへのパスを通します。


僕の場合は、.zshrcにaliasで以下のようにしてます。


 alias cpp='clang++ -std=c++17 -stdlib=libc++ -Wall -O2 -I/usr/local/include' 

コンパイルして、実行すると以下のように正常にコンパイルされ、実行できたと思います。

(runは./a/outのaliasです。)

構文チェックのエラーをなくす。

この記事のタイトルのところまでやってきました。


実に簡単にエラー解消、補完を効かせることができます。


カレントディレクトリにcompile_flags.txtファイルを作成します。

そして、1行


 -I/usr/local/include 

と書き込みます。


vimを再起動し、test.cppを開くと、構文チェックのエラーがなくなっているはずです。


補完はなんか微秒ですが、効きます。(効かないものがあるけど、構文エラーにならない)


あとから気がついたことなんですけど、compile_clags.txtはルートディレクトリにおいてもOKっぽいです。

一応、compile_clags.txtについて触れている他の記事ではカレントディレクトリに置くように書いてあるので僕の環境だけかもしれませんが。


以上です。

自己紹介

自分の写真
県立高校理数科2年
Unity2年目
Twitter
Note

人気の投稿

[Vim] coc.nvim + coc-clangdの構文チェックでboostのエラーが発生する

C++の拡張ライブラリ、Boost。 AtCoderでも使用が認められているライブラリです。 様々な便利機能が搭載されています。 競技プログラミングで使えるBoostライブラリ 初級編 から一部抜粋すると、 boost...

QooQ