vscode在编译时找不到标题,而Intellisense可以

时间:2019-05-12 03:43:14

标签: c++ boost visual-studio-code

问题已更新: 我正在尝试使用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值?

1 个答案:

答案 0 :(得分:0)

c_cpp属性用于智能感知。它不用于编译。编译器之所以存在,仅是因为它被要求查找用于系统标头的默认包含路径。

任务定义了构建任务的运行方式。

Vscode不能将两者连接起来。