Emacsのeglot+clangdでプロジェクトルートとIncludeディレクトリを指定する
お仕事でちょっと変わったディレクトリ構成のCのコードを読むときに、Emacsのeglot+clangdで一部のインクルードファイルが読み込まれずにジャンプがうまくいかなくて苦労したのでメモ。
init.elの編集
~/.config/emacs/init.el
を編集して次の行を追加します。
(setq project-vc-extra-root-markers '("compile_flags.txt"))
この記述をすると、 compile_flags.txt
という名前のファイルがあるディレクトリがeglotが認識するプロジェクトのルートディレクトリとして設定されます。
compile_flags.txtの作成
次に、 compile_flags.txt
という名前のファイルをプロジェクトのルートディレクトリに作成して、次の行を追記します。 Path\To\Project
は実際のインクルードディレクトリのパスに変更してください。
-IPath\To\Include
この記述により、eglotから起動されるclangdにインクルードパスを追加することができます。
Emacsでジャンプする
上記の設定をすることで、 M-.
や M-,
でカーソル下にある変数やマクロの定義にジャンプをすることができます。
lvmcacheを構築してみた
うちの環境では、Linuxのlibvirtで作成した仮想環境上で動くWindows 10の中でFF14を動かしています。このWindows 10のストレージにはNVMe上に切ったパーティションを使っているのですが、容量が足りなくなってきたので、LinuxでNVMeとHDDを組み合わせて使うということを試してみました。そのときの作業メモです。うちのFF14、どんどん変態的な環境になっていく…
Windows 10のバックアップ
まず現在のWindows 10のディスクイメージをバックアップします。
sudo dd if=/dev/nvme0n1p2 of=/work/win.img
PVの作成
次にNVMeとHDDを使ってPVを作ります。
sudo pvcreate /dev/sda2 sudo pvcreate /dev/nvme0n1p2
VGの作成
次にVGを作ります。
sudo vgcreate win /dev/sda2 /dev/nvme0n1p2
LVの作成
次にLVを作ります。パーティション全体を使うには、 -l 100%FREE
とします。どうでもいいことですが、PV, VG, LVってLVMのことを理解してないとわけわからない…
sudo lvcreate -n cache -l 100%FREE win /dev/nvme0n1p2 sudo lvcreate -n data -l 100%FREE win /dev/sda2
LVの変換
最後にNVMeのLV( win/cache
)をキャッシュにしてHDDのLV( win/data
)と統合します。 256KiB
は環境によって適当に変えます。また、 writeback
は危険だという警告が出ますがここはパフォーマンスを優先します。
sudo lvconvert --type cache --cachevol cache --chunksize 256KiB --cachemode writeback win/data
Windows 10を書き戻す
バックアップしておいたWindows 10のディスクイメージを書き戻します。
sudo dd if=/work/win.img of=/dev/mapper/win-data
あとはWindows 10上でファイルシステムを拡張します。うちの環境では回復パーティションを削除する必要がありました。削除していいかちょっと迷いましたが今まで役に立ったことがないしまあいいか…