问题已更新: 我正在尝试使用C / C ++扩展在vscode上构建一个c ++项目。编译器抱怨找不到头文件(实际上是增强头文件)。我已经包含了boost根目录的路径,并且Intellisense也能够解析头文件路径,但是不能解析编译器。我检查了源文件中包含的标头是否在文件系统中的相应路径中。有什么解决方法可以使编译器看到包含标头?
这是我的c_cpp_properties.json
文件:
{
"configurations": [
{
"name": "Win32",
"includePath": [
"${workspaceFolder}/**",
"C:/Users/zz_ro/Documents/source/boost_1_70_0"
],
"defines": [
"_DEBUG",
"UNICODE",
"_UNICODE"
],
"windowsSdkVersion": "10.0.17763.0",
"compilerPath": "C:/mingw/bin/g++.exe",
"cStandard": "c11",
"cppStandard": "c++11",
"intelliSenseMode": "gcc-x64"
}
],
"version": 4
}
这是我的helloworld.cpp
文件:
#include "boost/math/constants/constants.hpp"
#include "boost/multiprecision/cpp_dec_float.hpp"
#include <iostream>
#include <limits>
int main()
{
using boost::multiprecision::cpp_dec_float_50;
cpp_dec_float_50 seventh = cpp_dec_float_50(1) / 7;
std::cout.precision(std::numeric_limits<cpp_dec_float_50>::digits10);
std::cout << seventh << std::endl;
}
这是编译器的输出:
helloworld.cpp:1:46: fatal error: boost/math/constants/constants.hpp: No such file or directory
#include "boost/math/constants/constants.hpp"
^
compilation terminated.
The terminal process terminated with exit code: 1
如果我将tasks.json
更改为
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build hello world",
"type": "shell",
"command": "g++",
"args": [
"-g",
"helloworld.cpp",
"-o",
"helloworld"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
到
{
// See https://go.microsoft.com/fwlink/?LinkId=733558
// for the documentation about the tasks.json format
"version": "2.0.0",
"tasks": [
{
"label": "build hello world",
"type": "shell",
"command": "g++",
"args": [
"-g",
"-IC:\\Users\\zz_ro\\Documents\\source\\boost_1_70_0",
"helloworld.cpp",
"-o",
"helloworld"
],
"group": {
"kind": "build",
"isDefault": true
}
}
]
}
只需手动将包含路径作为参数传递给g++.exe
,编译就会完成。令我感到困惑的是,在教程(vscode tutorial)中,没有提到通过命令行参数手动将包含路径插入到g++.exe
的情况,所有这些都应该通过修改{中的includePath变量来完成。 {1}}。是我误解了本教程,还是没有正确设置includePath值?
答案 0 :(得分:0)
c_cpp属性用于智能感知。它不用于编译。编译器之所以存在,仅是因为它被要求查找用于系统标头的默认包含路径。
任务定义了构建任务的运行方式。
Vscode不能将两者连接起来。