我遇到一个问题,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.
答案 0 :(得分:1)
您没有告诉编译器有关Zipper.h文件的任何信息,也没有告诉它有关文件的位置。 “ g ++ test.cpp -o test”只是告诉编译器编译一个名为test.cpp的源文件并将其链接。您必须了解Visual Studio Code不是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 Code中设置的包含路径。因此,要编译项目,您必须告诉编译器他需要知道的所有内容。 Visual Studio Code只是执行您在任务中指定的内容。这与转到该目录并在命令提示符中键入相同的内容相同。因此,我建议您阅读有关如何使用g ++编译c ++项目的信息,您的问题与Visual Studio Code根本无关。如果您打算做的事情比仅一个源文件大一点,我强烈建议您学习CMake。一旦您有更多的源文件并包含要链接的/库,通过手动调用gcc get进行编译就会非常复杂。设置完Cmake之后,您只需在Visual Studio Code中指定与此任务类似的任务即可构建您的项目:
{
"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 Code用于我的c ++工作时,这有助于我理解这一点。
答案 1 :(得分:0)
即使includePath更改,Visual Studio Code也不更改生成命令本身。您应该自己在.vscode/tasks.json
中更改构建命令。参见this tutorial。