vscode не может найти заголовок при компиляции, в то время как Intellisense может - PullRequest
0 голосов
/ 12 мая 2019

Вопрос обновлен: Я пытаюсь построить проект c ++ на vscode, используя расширение C / 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 ) нет упоминания о ручной вставке пути включения к g++.exe через параметры командной строки, где все это должно быть сделано путем изменения переменной includePath в c_cpp_property.json. Я неправильно понял учебник или неправильно установил значение includePath?

1 Ответ

0 голосов
/ 12 мая 2019

c_cpp свойства для intellisense. Не используется для компиляции. Компилятор существует только потому, что он запрашивает поиск путей включения по умолчанию, которые он использует для системных заголовков.

Задачи определяют, как выполняется задача сборки.

Vscode не соединяет два.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...