Visual StudioでC++書く人向けのvscode&CMake乗り換えメモ
想定読者
- 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から検索すれば出てきます。
チュートリアル
リポジトリクローン ~ 動作確認
こちらでやります。
まずは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デバッグができます。ブレークポイントを当てて、依存先のソースコードの中までステップインしていくことも可能です。
(追記)
続きでテストも、という方はこちらへ。
参考サイト
Discussion