C++/G++,包括来自另一个文件夹的标头

C++/G++ including headers from another folder

提问人:Niek Jonkman 提问时间:9/17/2018 最后编辑:SSteveNiek Jonkman 更新时间:4/3/2020 访问量:5650

问:

我得到了一个 C++ 项目(用于学校),我需要运行并添加其他代码。我想在 Visual Studio Code 中运行该项目。我已经下载了 C/C++ 扩展以及 Code Runner 扩展。当我尝试运行 main.cpp 文件时,出现以下错误:

enter image description here

ANTLRInputStream.h 文件位于运行时文件夹中的另一个 src 文件夹中。我可以将包含更改为如下所示:

#include "../runtime/src/ANTLRInputStream.h" 

但这会给我带来另一个错误,在 ANTLRInputStream 中,有一堆包含也引用位于其他地方的头文件。

我有以下属性文件:

{
"configurations": [
    {
        "name": "MinGW",
        "compilerPath": "C:/Program Files (x86)/mingw-w64/i686-8.1.0-posix-dwarf-rt_v6-rev0/mingw32/bin/gcc.exe",
        "includePath": [
            "${workspaceFolder}/**",
            "runtime/src"
        ],
        "defines": [
            "_DEBUG",
            "UNICODE",
            "_UNICODE"
        ],
        "intelliSenseMode": "gcc-x64"
    }
],
"version": 4
}

我尝试了一些变化,例如:

  • 运行时/src
  • ${rootFolder}/**
  • ${rootFolder}/运行时/src

还有一些类似的,但它们不起作用,我真的不知道它们是否应该起作用(因为我真的不知道如何在 VSCode 中设置 C++ 项目)。我将如何使我的所有包含工作并能够运行程序,而无需手动更改每个包含以查找其位置?

C++ visual-studio-code 包含 头文件 vscode-code-runner

评论

0赞 skpro19 5/5/2021
你为 VS Code 使用什么主题?

答:

0赞 OrdoFlammae 9/17/2018 #1

看起来(从根文件夹中的文件来看,您的项目是 CMake 项目。您可以在此处找到有关 VSC 的 CMake 扩展的信息。CMakeLists.txt

评论

0赞 Niek Jonkman 9/17/2018
不幸的是,使用“${workspaceDir}/runtime/src”和变体似乎并不能解决我的问题。我已经检查了您提供的文件。有一次,他们提到了以下内容:“如果找不到 #include 文件或其依赖项之一,您还可以单击 include 语句下的绿色波浪线来查看有关如何更新配置的建议。就我而言,我在IDE中没有错误或波浪线。对我来说,编译器似乎找不到正确的头文件,但 IDE 可以?
1赞 OrdoFlammae 9/17/2018
是的,我不知道是否真的有办法像这样传递编译器的东西,而不是在配置文件中定义参数。但是,使用提供的 CMakeLists.txt 文件应该可以像应有的方式进行设置。
0赞 BareMetalCoder 9/17/2018
如果你不介意尝试Visual Studio 2017(假设你在Windows上),它现在内置了本机CMake支持 - 你只需点击File/Open/CMake,然后选择CMakeLists.txt文件。CMakeLists 应具有在编译器运行时将包含目录传递给编译器的必要信息。不过,VS2017 中的界面和快捷键与 VSC 不同,因此可能需要一些时间来适应。
0赞 Scott McPeak 4/3/2020 #2

从屏幕截图中可以看出,错误消息为:

main.cpp:2:10: fatal error: ANTLRInputStream.h: No such file or directory

此错误来自编译器,而不是 Visual Studio Code。VSCode 只是在它自己的输出窗口中显示编译器的输出。g++

要解决此问题,您必须使用 -I 选项告诉编译器在哪里查找文件,例如:

g++ -I../runtime/src main.cpp -o main

in 中的属性用于告诉 VSCode(而不是编译器)在哪里可以找到头文件。我的这个答案更详细地谈到了。includePathc_cpp_properties.jsonincludePath