🎃

Visual StudioでC++書く人向けのvscode&CMake乗り換えメモ

2024/01/28に公開

想定読者

  • C++のコーディングをVisual Studioでやっている/やっていた人
  • 何らかの事情でVisual Studio Codeへ乗り換えとなった人
  • CMakeでのビルドに興味があるがやり方がピンと来ない人

この記事を読むと

  • Visual Studioの「プロジェクトのプロパティ」相当の操作をCMakeでどうやってやるのかがわかります
  • vscodeでコーディング→ビルド→デバッグ→リリースを行い、IDEとして使えるようになります

なぜCMake

C/C++は他の言語と比べて手動設定しなければいけないことが多く、Windows/Linuxなどプラットフォームによっても統一性がなく、ビルド時のオプション切り替えや依存関係の解決が非常に面倒です。
CMakeはそのあたりのごちゃごちゃを受け止めてくれるツールです。Visual Studioユーザー目線で言えば、~.slnや~.vcxprojなどの設定を一手に引き受けてくれるものです。
さらにvscodeの拡張機能としてCMakeを使うことで、全くコマンドを打つことなく少量の設定ファイルだけでC/C++のソースコードをコンパクトに管理できますし、マルチプラットフォーム対応も簡単になります。

システム要件

  • Visual Studio Codeがインストールされていること
  • CMakeがインストールされていること
  • C++のコンパイラがインストールされていること (Visual Studio使っている方はすでに入ってます)

vscode拡張機能の導入

とりあえず以下3つがあればコーディングからビルドやデバッグまで事足ります。
いずれもvscodeのExtensionsから検索すれば出てきます。

https://marketplace.visualstudio.com/items?itemName=ms-vscode.cmake-tools

https://marketplace.visualstudio.com/items?itemName=josetr.cmake-language-support-vscode

https://marketplace.visualstudio.com/items?itemName=ms-vscode.cpptools

チュートリアル

リポジトリクローン ~ 動作確認

こちらでやります。

https://github.com/husty530/cmake_template

まずはvscodeでCMakeLists.txtがある階層を開き、下のバーのところにCMakeナントカみたいなのが並ぶのを確認しましょう。いずれもボタンです。

"No Kit Selected"をクリックするとコンパイラを選択できます。Visual Studio ... と出てくるのでどれかを選択してください。
"Build"を押すと、その右に書いてあるターゲットがビルドされます。ここでは[all]となっていますが、選べます。このターゲットはVisual Studioのプロジェクトに相当します。さらにその右のアイコンを押すとそれぞれデバッグ、実行ができます。F5でデバッグする方法は後述します。

(追記)
なんだか最近のアップデートのせい(?)で、ステータスバーの表示がデフォルトで"hidden"になってしまいました。もとに戻すにはvscodeのsettingsよりCMake > Options: Status Bar Visibilityを"visible"に変えてください。

CMakeLists.txtの書き方

説明が面倒なので、実際のファイルを真似てください&適宜調べてくださいに留めておきます。
よく使うVisual Studioの設定項目との対応だけ一覧化すると以下のようになります。

Visual Studio CMake
language standard set(CMAKE_CXX_STANDARD 17)
output directory install
additional include directories target_include_directories
additional library directories target_link_directories
additional dependencies target_link_libraries
macro settings target_compile_definitions

その他、vscodeの設定

.vscodeフォルダ内のファイルでワークスペースの設定をします。

まずCMakeのConfigurationに関する設定ですが、コマンドラインだったら引数で渡すところをsettings.jsonに記述します。以下は一例ですので自由に設定してください。buildDirectoryはCMakeのキャッシュなどの一時ファイルの出力先で、installは最終成果物(exe, dllなど)の出力先です。

{
  "cmake.buildDirectory": "${workspaceFolder}/build",
  "cmake.installPrefix": "${workspaceFolder}/build/install",
  "cmake.configureArgs": []
}

次に、ここからはオプションですがCMakeの作業をさらにショートカットするための設定です。tasks.jsonでCMakeのinstallビルドアクションを登録しておき、launch.jsonでそれを呼び出したあとにターミナルを立ち上げてデバッグする流れを記述しています。

{
	"version": "2.0.0",
	"tasks": [
    {
      "type": "cmake",
      "label": "CMake: install",
      "command": "install"
    }
  ]
}
{
  "version": "0.2.0",
  "configurations": [
    {
      // for Windows
      "name": "(msvc) Launch",
      "type": "cppvsdbg",
      "request": "launch",
      "program": "${command:cmake.launchTargetPath}",
      "args": [],
      "cwd": "${workspaceFolder}",
      "preLaunchTask": "CMake: install"
    },
    {
      // for Linux
      "name": "(gdb) Launch",
      "type": "cppdbg",
      "request": "launch",
      "program": "${command:cmake.launchTargetPath}",
      "args": [],
      "cwd": "${workspaceFolder}",
      "preLaunchTask": "CMake: install"
    }
  ]
}

あとは下のバーでターゲットに実行したいプロジェクト(本リポジトリであれば"exe_proj")を選択しておけば、Visual Studioと同じ感覚でF5デバッグができます。ブレークポイントを当てて、依存先のソースコードの中までステップインしていくことも可能です。

(追記)
続きでテストも、という方はこちらへ。

https://zenn.dev/husty/articles/8dc0bce0433980

参考サイト

https://qiita.com/Hiroya_W/items/049bfb4c6ad3dfe6ff0c

https://qiita.com/shohirose/items/637f4b712893764a7ec1

Discussion