C++開発シリーズ前回までの記事
- C++開発とCMake ~その1 : CMake入門~
- C++開発とCMake ~その2 : 自作ライブラリの作り方~
- C++開発とCMake ~その3 : 外部ライブラリを自前でビルドして使う(OSC with liblo)~
- CMakeコマンド基本中の基本
C++の開発をVSCodeで行う場合CMake ToolsやC/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)が選択肢に上がる。
ここで任意のコンパイラを設定する。
ただこの設定は.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
で確認できる。
現在選択しているコンパイラを確認するには、VSCodeの下のステータスバーで確認できる。
C/C++でコンパイラを指定する。
これは先述した通りIntelliSenseの動作に影響するもの。
CMD + SHIFT + P
で設定ファイルを開く。
{
"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のビルドタイプを選択する。
基本は、Debug
とRelease
がある。その名の通りdebugするときはDebug
、ReleaseするときはRelease
を選択する。
Release
を選択してもCMake:Debugは可能であるが、デバッグ情報がないので正確にデバッグできない可能性がある。
CMake : Select Build Target
自分のプロジェクトで作成したターゲット以外にall
とinstall
があり、これは何かというと、
CMakeにはデフォルトのターゲットがあり、それがall
とinstall
であるらしい。
all
: このターゲットをビルドすると、CMakeプロジェクトに含まれるすべてのターゲットがビルドされます。これは、プロジェクトのすべての部分を一度にビルドするのに便利です。
install
: このターゲットをビルドすると、ビルドされたバイナリと関連するファイルがインストールディレクトリにコピーされます。このディレクトリは、CMakeのCMAKE_INSTALL_PREFIX変数で設定します。このターゲットは、ソフトウェアを配布したり、システムにインストールしたりするために使用されます。
とのこと。
CMake: Select Debug Target
をしても何も表示されない場合の、理由はデバッグ可能なターゲットがCMakeLists.txtで記述したターゲットが一つだからだと思われる。複数ある場合はそれが選択できる。はず。。
以上。また何かあったら追記する。
C++開発シリーズ
- C++開発とCMake ~その1 : CMake入門~
- C++開発とCMake ~その2 : 自作ライブラリの作り方~
- C++開発とCMake ~その3 : 外部ライブラリを自前でビルドして使う(OSC with liblo)~
- CMakeコマンド基本中の基本
- VSCodeでC++開発 拡張機能CMake ToolsとC/C++の設定
References
- chatgpt4