VSCode 无法识别来自 includepath 的包含
VSCode not recognizing includes from includepath
我遇到了一个问题,VSCode 会识别出我对 zipper.h 的包含,然后突然冒出来告诉我没有这样的文件或目录。我不确定这是否是我的代码或包含或 vs 代码的问题。
https://i.gyazo.com/2d35a31abf83546d8633d991bcb4752a.png
https://i.gyazo.com/96ad7825e8d1c390035a4db2f789bbcf.png
我已经尝试将它同时添加到我的包含路径和 windows 环境路径中。出于同样的原因,它一直失败。我对自己做错了什么感到很困惑。它不承认这些链接吗?编译时我应该通过 g++ 链接库吗?
#include <zipper.h>
void zipFolder()
{
zipper::Zipper zipFile("logs.zip");
zipFile.add("C:\Cycling");
zipFile.close();
}
int main(int argc, char const *argv[])
{
return 0;
}
c:\Users\Desk\Desktop\Code\Cycling>cd "c:\Users\Desk\Desktop\Code\Cycling\" && g++ test.cpp -o test && "c:\Users\Desk\Desktop\Code\Cycling\"test
test.cpp:1:10: fatal error: zipper.h: No such file or directory
#include <zipper.h>
^~~~~~~~~~
compilation terminated.
Visual Studio 代码不会更改构建命令本身,即使 includePath 更改也是如此。您应该在 .vscode/tasks.json
中自己更改构建命令。参见 this tutorial。
您没有告诉您的编译器任何关于名为 Zipper.h 的文件或它所在的位置,或任何与之相关的信息。 "g++ test.cpp -o test" 只是告诉编译器编译一个名为 test.cpp 和 link 的源文件。您必须了解 Visual Studio 代码不是 IDE 并且无法自行编译。您应该在 .vscode 目录中有一个名为 c_cpp_properties.json 的文件。我使用的示例看起来像这样,并为 mingw64 配置。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/Source/**"
],
"compilerPath": "C:\mingw-w64\mingw64\bin\gcc.exe",
"intelliSenseMode": "gcc-x64",
"browse": {
"path": [
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 4
}
这会告诉 Visual Studio 代码您的源文件和库所在的位置。这是用于 IntelliSense 的内容(语法高亮、错误波浪线、代码完成等)。但是,这与构建您的项目绝对无关。您的编译器现在不知道您在 Visual Studio 代码中设置的包含路径。所以要编译你的项目,你必须告诉你的编译器他需要知道的一切。 Visual Studio 代码只是执行您在任务中指定的内容。这与转到该目录并在命令提示符中输入相同的内容相同。所以我建议您阅读如何使用 g++ 编译 c++ 项目,您的问题与 Visual Studio 代码完全无关。如果您打算做一些比单个源文件更大的事情,我强烈建议您学习 CMake。一旦你有更多的源文件和包含/库到 link,通过手动调用 gcc get 进行编译真的很复杂。设置好 Cmake 后,您只需在 Visual Studio 中指定一项任务 代码类似于此代码来构建您的项目:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "cmake --build Build",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
我还建议您阅读以下内容:
https://code.visualstudio.com/docs/cpp/config-mingw
这是一个很好的解释,基本上准确地解释了 Microsoft 正在尝试做的事情,并且在我开始使用 Visual Studio 代码进行我的 C++ 工作时帮助我理解了这一点。
"includePath"
属性在c_cpp_properties.json
和settings.json
中都只与内部编辑器的IntelliSense功能有关,与编译无关。
为了告诉编译器必要的包含路径,你需要在你的构建任务中指定一个相应的编译器选项(在tasks.json
中),即"-Ipath/to/my/include/files"
.
这是我的 tasks.json
文件中的构建任务示例(查看 "args"
属性 - 它包含编译器选项 "-I${workspaceFolder}/../.."
,即比当前版本高两个级别目录):
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++-9 build active file ver(1)",
"command": "/usr/bin/g++-9",
"args": [
"-std=c++17",
"-I${workspaceFolder}/../..",
"-g",
"${workspaceFolder}/*.cpp",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: /usr/bin/g++-9"
}
]
}
我遇到了一个问题,VSCode 会识别出我对 zipper.h 的包含,然后突然冒出来告诉我没有这样的文件或目录。我不确定这是否是我的代码或包含或 vs 代码的问题。
https://i.gyazo.com/2d35a31abf83546d8633d991bcb4752a.png https://i.gyazo.com/96ad7825e8d1c390035a4db2f789bbcf.png
我已经尝试将它同时添加到我的包含路径和 windows 环境路径中。出于同样的原因,它一直失败。我对自己做错了什么感到很困惑。它不承认这些链接吗?编译时我应该通过 g++ 链接库吗?
#include <zipper.h>
void zipFolder()
{
zipper::Zipper zipFile("logs.zip");
zipFile.add("C:\Cycling");
zipFile.close();
}
int main(int argc, char const *argv[])
{
return 0;
}
c:\Users\Desk\Desktop\Code\Cycling>cd "c:\Users\Desk\Desktop\Code\Cycling\" && g++ test.cpp -o test && "c:\Users\Desk\Desktop\Code\Cycling\"test
test.cpp:1:10: fatal error: zipper.h: No such file or directory
#include <zipper.h>
^~~~~~~~~~
compilation terminated.
Visual Studio 代码不会更改构建命令本身,即使 includePath 更改也是如此。您应该在 .vscode/tasks.json
中自己更改构建命令。参见 this tutorial。
您没有告诉您的编译器任何关于名为 Zipper.h 的文件或它所在的位置,或任何与之相关的信息。 "g++ test.cpp -o test" 只是告诉编译器编译一个名为 test.cpp 和 link 的源文件。您必须了解 Visual Studio 代码不是 IDE 并且无法自行编译。您应该在 .vscode 目录中有一个名为 c_cpp_properties.json 的文件。我使用的示例看起来像这样,并为 mingw64 配置。
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/Source/**"
],
"compilerPath": "C:\mingw-w64\mingw64\bin\gcc.exe",
"intelliSenseMode": "gcc-x64",
"browse": {
"path": [
"${workspaceFolder}"
],
"limitSymbolsToIncludedHeaders": true,
"databaseFilename": ""
}
}
],
"version": 4
}
这会告诉 Visual Studio 代码您的源文件和库所在的位置。这是用于 IntelliSense 的内容(语法高亮、错误波浪线、代码完成等)。但是,这与构建您的项目绝对无关。您的编译器现在不知道您在 Visual Studio 代码中设置的包含路径。所以要编译你的项目,你必须告诉你的编译器他需要知道的一切。 Visual Studio 代码只是执行您在任务中指定的内容。这与转到该目录并在命令提示符中输入相同的内容相同。所以我建议您阅读如何使用 g++ 编译 c++ 项目,您的问题与 Visual Studio 代码完全无关。如果您打算做一些比单个源文件更大的事情,我强烈建议您学习 CMake。一旦你有更多的源文件和包含/库到 link,通过手动调用 gcc get 进行编译真的很复杂。设置好 Cmake 后,您只需在 Visual Studio 中指定一项任务 代码类似于此代码来构建您的项目:
{
"version": "2.0.0",
"tasks": [
{
"label": "Build",
"type": "shell",
"command": "cmake --build Build",
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
我还建议您阅读以下内容: https://code.visualstudio.com/docs/cpp/config-mingw
这是一个很好的解释,基本上准确地解释了 Microsoft 正在尝试做的事情,并且在我开始使用 Visual Studio 代码进行我的 C++ 工作时帮助我理解了这一点。
"includePath"
属性在c_cpp_properties.json
和settings.json
中都只与内部编辑器的IntelliSense功能有关,与编译无关。
为了告诉编译器必要的包含路径,你需要在你的构建任务中指定一个相应的编译器选项(在tasks.json
中),即"-Ipath/to/my/include/files"
.
这是我的 tasks.json
文件中的构建任务示例(查看 "args"
属性 - 它包含编译器选项 "-I${workspaceFolder}/../.."
,即比当前版本高两个级别目录):
{
"version": "2.0.0",
"tasks": [
{
"type": "cppbuild",
"label": "C/C++: g++-9 build active file ver(1)",
"command": "/usr/bin/g++-9",
"args": [
"-std=c++17",
"-I${workspaceFolder}/../..",
"-g",
"${workspaceFolder}/*.cpp",
"-o",
"${fileDirname}/${fileBasenameNoExtension}"
],
"options": {
"cwd": "${fileDirname}"
},
"problemMatcher": [
"$gcc"
],
"group": {
"kind": "build",
"isDefault": true
},
"detail": "compiler: /usr/bin/g++-9"
}
]
}