【问题标题】:enable c++17 intellisense open folder visual studio ninja-clang启用 c++17 intellisense 打开文件夹 Visual Studio ninja-clang
【发布时间】:2019-03-08 04:30:55
【问题描述】:

使用“-Xclang -std=c++17”我可以构建可执行文件,但是我找不到激活 c++17 智能感知的内容。我已经尝试了很多组合,如下所示,但似乎都不起作用

CMakeLists.txt

cmake_minimum_required(VERSION 3.9.2)
set(CMAKE_CXX_STANDARD 17)
project(myapp)
add_compile_options("-Xclang" "-std=c++17")
add_executable(myapp main.cpp)
set_target_properties(myapp PROPERTIES CXX_STANDARD 17)
target_compile_features(myapp PRIVATE cxx_std_17)

main.cpp

#include <tuple>
namespace test1::test2 // red [qualified name is not allowed]
//       ^^^^^^^^^^^^^
{}

int main()
{
    auto[a, b] = std::pair<int, int>();
    //  ^^^^^^
    return 0;
}

CMakeSettings.json

{
  // See https://go.microsoft.com//fwlink//?linkid=834763 for more information about this file.
  "configurations": [
    {
      "name": "x64-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [ "msvc_x64_x64" ],
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": "",
      "variables": [
        {
          "name": "CMAKE_CXX_COMPILER",
          "value": "clang-cl"
        },
        {
          "name": "CMAKE_C_COMPILER",
          "value": "clang-cl"
        },
        {
          "name": "CMAKE_SYSTEM_NAME",
          "value": "Windows"
        }
      ]
    }
  ]
}

【问题讨论】:

    标签: c++ cmake visual-studio-2017


    【解决方案1】:

    至于 2017 年 12 月,定义 IntelliSense 模式的唯一方法是通过根文件夹中的 CppProperties.json 文件,不能与 CMakeSettings.json 结合使用。

    Visual C++ Team Blog: Customizing your Environment with Visual C++ and Open Folder下的cmets:

    • justanotherdev: "... 是否可以从通过 CMake 创建的项目中继承 CppProperties 包含的内容?如果是这样,从 Windows CMake 项目中获取 Linux intellisense 将是一件轻而易举的事,并且将解决 Linux 的一个主要问题(需要手动指定项目的所有包含)。”
      • Will Buik [MSFT]:“今天不支持。...”

    我已经尝试过,但没有使用类似于"Open Folder projects in Visual C++" documentation 中推荐的方法。

    1. 我确实去了Project / Edit Settings / CppProperties.json

    2. 并插入到我的配置中进行测试,例如

      ...
          "compilerSwitches": "/std:c++17",
          "intelliSenseMode": "windows-msvc-x86"
      ...
      

      或任何其他支持的模式:


    参考文献

    【讨论】:

      【解决方案2】:

      要为 C++17 启用正确的 Intellisense,请在项目定义之前在 CMakeLists.txt 中指定 set(CMAKE_CXX_STANDARD 17);不需要其他配置。 CMake 将在构建时为 clang-cl 提供 -std=c++17

      cmake_minimum_required (VERSION 3.9.2)
      
      set(CMAKE_CXX_STANDARD 17)
      
      project ("test")
      add_executable (Test "test.cpp" "test.h")
      

      在 Visual Studio 2017 15.9.8 中验证

      【讨论】:

      • 一个细节:CMAKE_CXX_STANDARD 必须在任何目标定义之前设置,而不是在项目定义之前。
      猜你喜欢
      • 1970-01-01
      • 2011-06-25
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 2023-03-15
      • 2012-10-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多