Mayonnaizse
@Mayonnaizse

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

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.txtc_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でやればいい的なのは無しでお願いします。

0

1Answer

c_cpp_properties.json を生成するカスタムターゲットを追加して、各ターゲットがそいつに依存するようにできませんかね。

0Like

Your answer might help someone💌