ZedでCMake + MSVC開発
先日、遂にZedエディターがWindowsで正式に配布されました🎉
Rust製で動作が軽いという噂を聞いたので、早速試してみます。
今回は
- ビルドシステム: CMake
- コンパイラ: C++ Clang Compiler for Windows (1.9.15)
- ジェネレータ: Ninja
を使って、ZedでWindowsアプリケーションを開発できる環境を構築するやり方を残そうと思います。
筆者は全くビルドシステムやらコンパイラらへんが詳しくないので、間違ってる箇所あればご指摘いただけると助かります。。。
インストール
CMake, Ninjaはそれぞれインストール及びパスを通すだけなのですが、Clangコンパイラに関しては別途でインストールして上げる必要があります。
(そもそもなぜこんなのを使っているかというと、以前MSVCのコンパイラを直接使った際に、c++2a以降の機能をclangdが認識してくれなかったためです。解決策あったら知りたい)
Visual Studio Installerを開いて、編集 -> 個別のコンポーネントにClangなどと入れるとおそらく出てきます。

インストール後、楽をするためにコンパイラのフォルダのパスをあらかじめ登録しておきます。
Visual Studio 2022の場合、以下のディレクトリが該当します
C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Tools\Llvm\x64\bin
環境構築
早速、Zedでの作業に入ります
その前に、CMakeLists.txtにset(CMAKE_EXPORT_COMPILE_COMMANDS ON)を追加しておきます。
これはZedの公式ドキュメントでも記載されていて、clangd上でlspを実現するために不可欠なものらしいです。
それが終わったらターミナルを開き、
mkdir build
cd build
cmake -G "Ninja" -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=RelWithDebInfo ..
を実行し、ビルド設定を生成します
これだけで、とりあえずはZedでかけるようになります。
案外すんなり。

ビルドは、今回ジェネレーターにNinjaを使っているので、
cmake --build build
するだけです。
以上です!
コマンドをタスク化する
ただ、今までの内容を毎回打ってこれから作業をするのは少し大変なので、Zedの機能としてあるTask機能を使ってビルドを自動化する方法も書いておきます。
やり方は、特定のディレクトリにあるtasksファイルをいじるか、新規に.zed/tasks.jsonを作るの二択があるようです。
正直どちらでもいい気もしますが、今回は後者にしました。
以下が、tasks.jsonの内容です(ほぼドキュメントからコピペ)
[
{
"label": "Reload with RelwithDebInfo",
"command": "mkdir build; cd build; cmake -G \"Ninja\" -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=RelWithDebInfo ..",
"use_new_terminal": true,
"allow_concurrent_runs": false,
"reveal": "always",
"hide": "never",
"shell": "system",
"show_summary": true,
"show_command": true
},
{
"label": "Reload with Release",
"command": "mkdir build; cd build; cmake -G \"Ninja\" -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release ..",
"use_new_terminal": true,
"allow_concurrent_runs": false,
"reveal": "always",
"hide": "never",
"shell": "system",
"show_summary": true,
"show_command": true
},
{
"label": "Build with Ninja",
"command": "cmake --build build",
"use_new_terminal": true,
"allow_concurrent_runs": false,
"reveal": "always",
"hide": "never",
"shell": "system",
"show_summary": true,
"show_command": true
}
]
ファイルを作ったあとcmd-shift-pでtask:spawnを選択することで、登録したタスクを呼び出せます😆

ただ、これ完全にWindows専用なのでもっといい方法があるといい感
Discussion