提问人:Niek Jonkman 提问时间:9/17/2018 最后编辑:SSteveNiek Jonkman 更新时间:4/3/2020 访问量:5650
C++/G++,包括来自另一个文件夹的标头
C++/G++ including headers from another folder
问:
我得到了一个 C++ 项目(用于学校),我需要运行并添加其他代码。我想在 Visual Studio Code 中运行该项目。我已经下载了 C/C++ 扩展以及 Code Runner 扩展。当我尝试运行 main.cpp 文件时,出现以下错误:
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++ 项目)。我将如何使我的所有包含工作并能够运行程序,而无需手动更改每个包含以查找其位置?
答:
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(而不是编译器)在哪里可以找到头文件。我的这个答案更详细地谈到了。includePath
c_cpp_properties.json
includePath
评论