VSCodeでのWindows MSVCを使用したC++プロジェクトのIntellisense有効化
解決したいこと
クロスプラットフォーム開発を行うため、CMakeでビルドできる環境を作成中です。
CMakeでコンフィギュレーションを行う度に自動でIntellisenseを変更するできるようにしたいと考えております。
Windows→Linux向けには後述する以下の設定で出来ているのですが、Windows用のインテリセンス設定がどうすればいいのか分かっておらず質問いたします。
Linux向け設定
関係ない設定箇所は省いていますが、CMakeファイルは以下の通りです。
cmake_minimum_required(VERSION 3.10)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ../../bin)
if(${BUILD_TARGET} STREQUAL Windows)
elseif(${BUILD_TARGET} STREQUAL Linux)
else()
message(FATAL_ERROR "target is not correct")
endif(${BUILD_TARGET} STREQUAL Windows)
# compile_commands.jsonを生成 ★
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
project(main)
add_subdirectory(src)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
とすることで、buildディレクトリにcompile_commands.json
を生成させています。以下のc_cpp_properties.json
の構成を使用することでいい感じにインテリセンスが有効化されているのを確認しました。
{
"version": 4,
"configurations": [
{
"name": "Linux",
"includePath": [
"${workspaceFolder}/**"
],
"configurationProvider": "ms-vscode.cmake-tools",
"compileCommands": "${workspaceFolder}/build/compile_commands.json"
}
]
}
下記にある通り、Linux向けにはMakefileを使用しているため、set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
が効きます。
CMAKE_EXPORT_COMPILE_COMMANDS
Note This option is implemented only by Makefile Generators and Ninja Generators.
It is ignored on other generators.
Windows向け設定
Windows向けにはMSVCをジェネレータとして使用しているため、set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
が効かない状態になっております。
以下のように決め打ちでやるでもいいっちゃいいのですが、今後ビルド設定を変える時にCMakeLists.txt
とc_cpp_properties.json
の両方の面倒を見る必要があるため、嬉しくない状態になります。
{
"name": "Win32",
"compilerPath": "C:/Program Files (x86)/Microsoft Visual Studio/2019/Community/VC/Tools/MSVC/14.28.29333/bin/Hostx64/x64/cl.exe",
"intelliSenseMode": "windows-msvc-x64",
"includePath": ["${myIncludePath}"],
"defines": ["${myDefines}", "_WINDOWS"],
"cStandard": "c17",
"cppStandard": "c++20",
"windowsSdkVersion": "10.0.19041.0",
"browse": {
"path": ["${myIncludePath}", "${workspaceFolder}"]
}
}
↑c_cpp_properties.json referenceより
ベストプラクティスというか、こうやるといいみたいなアイデア、アドバイス等何かございましたらお願い致します。
なお、VSCodeで完結させたいので、Visual Studioでやればいい的なのは無しでお願いします。