Visual Studio代码:C++包含路径

Def*_*ess 6 c++ include-path visual-studio-code

我目前正在使用https://marketplace.visualstudio.com/items?itemName=mitaki28.vscode-clang,它非常适合访问成员函数.

但是我对我正在导入的项目有一个问题.虽然上面的clang功能有效,但我在使用include目录时遇到了特殊问题.我的项目结构如下:

|- src/
   |- main.cpp
|- include/
   |- MyHelper.h
|- CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

有没有办法在Visual Studio代码中配置我的包含目录,这样main.cpp我就可以: #include "MyHelper.h"而不是#include "include/MyHelper.h"?

在编辑器中,它突出显示我的include语句,说它无法找到该文件.虽然编辑器不是一个大问题(我的项目编译),后续问题是vscode-clang插件不起作用,因为它没有看到该文件.

也许甚至让它在编辑器中使用我的CMakeLists.txt中的配置进行必要的包含?

谢谢!

r0n*_*0ng 13

如果你使用 CMake,VSCode 有 CMake 插件来帮助你构建项目。所以你不需要修改settings.json。只需使用:

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include") 
Run Code Online (Sandbox Code Playgroud)

或者,如果没有其他模块使用该文件夹中的头文件,您可以使用以下内容:

target_include_directories(MyHelper, "${CMAKE_CURRENT_SOURCE_DIR}/include") 
Run Code Online (Sandbox Code Playgroud)

如果您只需要成功构建项目。这就是整个故事。

在这种情况下,#include 语句下的一些绿色小锯齿线会伤害您的眼睛。您需要生成 c_cpp_properties.json。它与帮助编译器构建代码无关,而是帮助 VSCode 智能感知实现库和头文件的存在。同样,您可以通过在 CMakeLists.txt 中添加 CMake 选项来利用 CMake:

add_definitions(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)
Run Code Online (Sandbox Code Playgroud)

CMake 将compile_commands.json在您的构建目录下生成一个文件。VSCode 能够解析 Json 文件并根据该文件中的内容找到包含路径。所以你需要做的只是让 VSCode 知道 Json 文件在哪里。您可以通过在 c_cpp_properties.json 中添加以下行来做到这一点:

 "configurations": [
        {
            "name": "Mac",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json",
            ...
        }],
Run Code Online (Sandbox Code Playgroud)

重建项目会让 VSCode 智能感知找到所有必要的路径。

[环境]
Ubuntu:16.04.3
VSCode:1.23.1
VSCode 插件:C/C++ 0.17.0、CMAKE 0.0.17、CMakeTools 0.11.1

  • `add_definitions(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)` 不起作用,但 `cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=ON` 工作正常。`set( CMAKE_EXPORT_COMPILE_COMMANDS ON )` 也有效。 (10认同)

Def*_*ess 5

好吧,这是愚蠢的,但如果有人使用Visual Studio Code并且没有一个简单的项目.这些说明假设你正在使用clang编译器:

  1. 打开项目目录
  2. 打开 .vscode/settings.json
  3. 在JSON对象内部配置以下行:

    // Compiler options for C++ (e.g. ['-std=c++11'])
    "clang.cxxflags": [
        "-I/path/to/my/include/directory" // header files
    ],
    
    Run Code Online (Sandbox Code Playgroud)