vscode cannot find header when compile while Intellisense can

14,894

c_cpp properties is for intellisense. It is not used for compiling. The compiler is there only because it is queried to find the default include paths it uses for system headers.

The tasks defines how the build task runs.

Vscode doesn't connect the two.

Share:
14,894
yang
Author by

yang

Updated on June 20, 2022

Comments

  • yang
    yang almost 2 years

    Question Updated: I'm trying to build a c++ project on vscode using the C/C++ extension. The compiler complains about not finding header files (actually boost headers). I have included path to the root folder of boost, and Intellisense is also able to parse the header paths, but not the compiler. I checked the included header in my source is in the corresponding path in my filesystem. Is there any solution to make the compiler see the include headers?

    This is my c_cpp_properties.json file:

    {
        "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
    }
    

    and this is my helloworld.cpp file:

    #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;
    }
    

    And here is the compiler output:

    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
    

    If I change my tasks.json from

    {
        // 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
                }
            }
        ]
    }
    

    to

    {
        // 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
                }
            }
        ]
    }
    

    by just manually passing the include path as an argument to g++.exe and the compilation will go through. It confuses me that in the tutorial (vscode tutorial) there is no mention about manually inserting include path to g++.exe via command line parameters, where all of these are supposed to be done by modifying the includePath variable in c_cpp_property.json. Did I misunderstand the tutorial or I didn't set the includePath value properly?