4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HoudiniAdvent Calendar 2024

Day 14

NeoVim 環境で C++ & CMake 環境を整えたい… for HDK

Last updated at Posted at 2024-12-14

はじめに

今回はゴリゴリの開発環境設定ネタ。

最近は特に Houdini のノードビルド環境を整えてきていて、CMake ツールも NeoVim + LazyVim 構成でサクッとインストールできるし、イイカンジ~~と思っていた。

しかしながら、実際にコーディングに移ってみると、C++ 側のコードリンクがうまく認識くれてなかったりして、これはどうしたものか…という混乱があった。

今回はそれを調査したのをまとめたい。

どういう状況?

インストール済み

  • Visual Studio 2019
  • CMake 3.27.0
  • Houdini 20.5.410
    • 今回の環境故のもので、気にしなくてもいいです。

導入済みのプラグイン

  • CMake
    • cmakelint
      • リンタ
    • cmakelang
      • ハイライトやフォーマッタ
    • neocmakelsp
      • LSP
  • Clangd
    • C/C++ 用の LSP / インテリセンス / フォーマッタ

上記の導入方法

基本的にに NeoVim + LazyVim 構成であれば LazyExtras の lang.cmakelang.clangd を有効にするだけで CMake/Clangd 関連のツールや LSP はインストールできる。

image.png

コンフィグだと、lazy.lua に次のように追加するだけ。

lazy.lua
require("lazy").setup({
  spec = {
    -- 省略
+   { import = "lazyvim.plugins.extras.lang.clangd" },
+   { import = "lazyvim.plugins.extras.lang.cmake" },
    -- 省略
  },
}

エラー状況

CMake Tools は正常に動いていて、CMakeLists.txt を編集していて保存してエラーがあれば警告してくるし、CMake コマンドでのビルド処理も問題なく実行できる。

NeoVim で CMake でビルド前提のプロジェクトを開いているが、次の様になっている。
リンクが通っておらず、かなりの数のエラーが出ている。

image.png

ヘッダファイルもこんな感じでエラーがでる。

image.png

VSCode や Visual Studio の場合

これが、VSCode や Visual Studio で同じ環境状態から立ち上げるとちゃんとリンクも通っている。
ソース参照先もたどれる。もちろんビルドも通る。

ただ、違う点としてはこちらの場合は Clangd ではなく、Microsoft の CMake Tools と C/C++ 拡張がサポートしている様子のため。

VSCode Visual Studio
image.png image.png

原因を探る

考えうる原因としては Clangd 側の扱いと CMake 側の扱いにミスマッチが起きていると想定。
Clangd 側が CMake 環境を想定しているわけでもないので、環境が CMake 側の生成したソリューションファイルにアクセスできていない?

ということで調べてみる。
なんかそれっぽいものがヒットした。

どうやら、直接のコンパイルとは違い、CMake 環境の間接コンパイルだと clangd が認識してくれないっぽいという予想は当たっている様子。
で、対応としては、コンパイルオプションを compile_commands.json というコンフィグファイルを作ることで対応できるらしい。
また、ソリューション全体としては compile_flags.txt でも対応できるらしい。

ということで試してみる。

compile_commands.json の生成

とりあえず、以下のコマンドを試してみる。

mkdir build
cd build
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON ..

あれ??
compile_commands.json が生成生成されないぞ…???

ん~なんでだ。
他の環境でも同様の挙動なのかを試してみる。

VSCode が行っている側のコマンドを見てみる。

image.png

C:\Program Files\CMake\bin\cmake.EXE" -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE --no-warn-unused-cli -SE:/Develop/Houdini/houdini-sop-volume-center-points -Be:/Develop/Houdini/houdini-sop-volume-center-points/build -G "Visual Studio 16 2019" -T host=x64 -A x64

ん~。やはり -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=TRUE という事で有効にはしている様だ。
よくよく、生成された内部の構造を見てみると、やはりこちらも compile_commands.json は作成されていない様だ。

困った…。。

別のジェネレーターで試してみる

どうやら、Visual Studio をジェネレーター対象にすると動作しない様子?

なので、Ninja で試してみる。

cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G "Ninja" -B "build"

すると…でた!

image.png

中身もなんかちゃんと書いてある!

image.png

では、インテリセンスは効いているか?

image.png

もともとのエラーとは打って変わって、認識は一応しているみたいだが、うまく効いていない様子… :thinking:

compile_flags.txt を試してみる

この方法はマニュアル記載になるので、なんだかなぁというのもあったが、背に腹は代えられぬという事で、試してみる。

compile_flags.txt
-std=c++17
-I.
-IC:/Program Files/Side Effects Software/Houdini 20.5.410/toolkit/include

確認してみる。

image.png

またエラーが変わった。どうやらこっちの方が toolkit/include 周りをちゃんと認識してくれている様子…。だが、多分、その toolkit/include から先が読みに行けていない様子。

現状の結論

なぜかうまくいってない!!
でもなんかあとちょっとな気がする…。。
今月中にはなんとかしたいw

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?