2023.05.23

VSCodeでC++開発 拡張機能CMake ToolsとC/C++の設定

C++開発シリーズ前回までの記事


C++の開発をVSCodeで行う場合CMake ToolsC/C++などの拡張機能を基本使うことになる。 設定が色々あるのだが、どこに何の設定をすれば良いのかわからなかったのでその備忘録。 ※macos上での設定だがある程度他の環境でも参考になるはず

基本設定

C++をvscodeで開発するにあたって、拡張機能のC/C++とCMake Toolsを使う。 基本的な設定はこちら([C++] 令和最新版 C++をVisual Studio Codeで書きたい)のサイトを参考にすればok. また、シンプルなプロジェクトを作ってみた記事はこちら -> C++開発とCMake ~その1 : CMake入門~

拡張機能のCMake ToolsとC/C++について

  • CMake Toolsはプロジェクトをビルドする際のコンパイラを指定する。
  • C/C++(c_cpp_properties.json)ではVSCodeのIntelliSenseで使用するコンパイラを指定する

設定でコンパイラを指定する箇所が色々あって混乱したのだが、それぞれ上記のような明確な役割の違いがある。 異なる目的で使用されるけど通常これらに指定するコンパイラは一致させる。

※ちなみにIntelliSenseとはVSCodeで開発するときのコードの補完とか関数の説明とかしてくれるやつのこと。

CMake Toolsでコンパイラを指定する。

CMD + SHIFT + PでパレットをひらきCMake: Select a Kitを選択する。 複数のコンパイルツールチェーン(kit)が選択肢に上がる。

Alt text

ここで任意のコンパイラを設定する。 ただこの設定は.vscodeの中のプロジェクトの設定ファイルにはデフォルトでは保存されてない。 使えるコンパイラをプロジェクトで明確にしておきたい場合は .vscode/cmake-kits.jsonや .vscode/settings.jsonファイル内の "cmake.configureSettings" に 以下のような記述をしておく。

[
    {
        "name": "GCC 9.3.0",
        "compilers": {
            "CXX": "/usr/bin/g++-9",
            "CC": "/usr/bin/gcc-9"
        }
    }
]

デフォルトのコンパイラを探す場合は [Scan for kits]で検索させることができる。

デフォルトのコンパイラのリストの記述方法を確認したいときは、 コマンドパレットを開いて、Cmake: Edit User-Local CMake Kitsで確認できる。

Alt text

現在選択しているコンパイラを確認するには、VSCodeの下のステータスバーで確認できる。

Alt text

C/C++でコンパイラを指定する。

これは先述した通りIntelliSenseの動作に影響するもの。

CMD + SHIFT + Pで設定ファイルを開く。

Alt text

{
  "configurations": [
    {
      "name": "Mac",
      "includePath": ["${workspaceFolder}/**", "/usr/local/include/**"],
      "defines": [],
      "macFrameworkPath": [
        "/Applications/Xcode_14.3.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
      ],
      "compilerPath": "/usr/bin/clang++",
      "intelliSenseMode": "clang-arm64",
      "cStandard": "c17",
      "cppStandard": "c++17",
    }
  ],
  "version": 4
}
パラメータ名 内容
compilerPath コンパイラのパスを指定する
intelliSenseMode 指定したコンパイラの種類を指定する。たとえばcompilerPathがgccのx64へ指定されていたら、ここはgcc-x64にする。
cStandard cのバージョンを指定する。CMakeLists.txtで明示されていればそれを参照する。
cppStandard c++のバージョンを指定する。CMakeLists.txtで明示されていればそれを参照する。

とここまで書いたが、CMake Toolsでコンパイラを指定していれば、その設定をc_cpp_properties.jsonで適応させるパラメータが存在した。

{
    "configurations": [
        {
            "configurationProvider": "ms-vscode.cmake-tools",
        }
    ],
}

何か特殊なケースで上書きしたい場合以外はこの設定をしておけば統一されてよさそうだ。 特殊なケースとはincludePathなどを追加したい場合などかな。。? なので、CMake Toolsを利用する場合は余計な設定はなるべくC++拡張の方ではしないほうが良さそう。

CMake Toolsのその他の設定

CMake: Select Variant

CMakeのビルドタイプを選択する。 基本は、DebugReleaseがある。その名の通りdebugするときはDebug、ReleaseするときはReleaseを選択する。 Releaseを選択してもCMake:Debugは可能であるが、デバッグ情報がないので正確にデバッグできない可能性がある。

CMake : Select Build Target

自分のプロジェクトで作成したターゲット以外にallinstallがあり、これは何かというと、 CMakeにはデフォルトのターゲットがあり、それがallinstallであるらしい。

all: このターゲットをビルドすると、CMakeプロジェクトに含まれるすべてのターゲットがビルドされます。これは、プロジェクトのすべての部分を一度にビルドするのに便利です。

install: このターゲットをビルドすると、ビルドされたバイナリと関連するファイルがインストールディレクトリにコピーされます。このディレクトリは、CMakeのCMAKE_INSTALL_PREFIX変数で設定します。このターゲットは、ソフトウェアを配布したり、システムにインストールしたりするために使用されます。

とのこと。

CMake: Select Debug Targetをしても何も表示されない場合の、理由はデバッグ可能なターゲットがCMakeLists.txtで記述したターゲットが一つだからだと思われる。複数ある場合はそれが選択できる。はず。。


以上。また何かあったら追記する。

C++開発シリーズ

References

  • chatgpt4