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

时间:2016-03-21 02:46:27

标签: c++ visual-studio-code include-path

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

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

|- src/
   |- main.cpp
|- include/
   |- MyHelper.h
|- CMakeLists.txt

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

在编辑器中,它突出显示我的include语句,说它无法找到该文件。虽然编辑器不是什么大问题(我的项目编译),但后续问题是vscode-clang插件无法正常工作,因为它看不到文件。

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

谢谢!

3 个答案:

答案 0 :(得分: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
    ],
    

答案 1 :(得分:1)

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

include_directories("${CMAKE_CURRENT_SOURCE_DIR}/include") 

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

target_include_directories(MyHelper, "${CMAKE_CURRENT_SOURCE_DIR}/include") 

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

在这种情况下,你会在#include句子下面有一些绿色的曲折线伤害你的眼睛。您需要生成c_cpp_properties.json。它与帮助编译器构建代码无关,而是帮助VSCode intellisense实现库和头文件的存在。再次,您可以通过在CMakeLists.txt中添加CMake选项来利用CMake:

add_definitions(-DCMAKE_EXPORT_COMPILE_COMMANDS=ON)

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

 "configurations": [
        {
            "name": "Mac",
            "compileCommands": "${workspaceFolder}/build/compile_commands.json",
            ...
        }],

重建项目将让VSCode intellisense找到所有必要的路径。

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

答案 2 :(得分:0)

我不知道我是否迟到。我在tasks.json文件中添加了arg。实际上,与第一个答案相同,但是在vscode中,我们可以更轻松地完成此操作。

在C ++中,使用g++ -g foo.cpp -o foo -I /path/to/include/dir添加头文件。

我们知道,在vscode中,tasks.json用于运行bash命令,但可以使用${fileDirname}之类的别名作为文件目录名称:)

无论如何,task.json

{
    "tasks": [
        {
            "type": "shell",
            "label": "g++ build active file",
            "command": "/usr/bin/g++",
            "args": [
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/out/${fileBasenameNoExtension}",
                "-I",
                "${fileDirname}/../Include/"
            ],
            "options": {
                "cwd": "/usr/bin"
            }
        }
    ],
    "version": "2.0.0"
}